• Das Erstellen neuer Accounts wurde ausgesetzt. Bei berechtigtem Interesse bitte Kontaktaufnahme über die üblichen Wege. Beste Grüße der Admin

Greasemonkey Script entwickeln

web2go

New member
Hallo!

Ich wollte ein Greasemonkeyscript für ein Browsergame entwickeln, welches meinen Onlinestatus anzeigt.

Dazu wollte ich auf jeder Seite ein kleines JS einbinden, welches einen Iframe aufruft. In dem Iframe wird dann eine PHP-Seite aufgerufen, welche meinen OnlineStatus übermittelt. Nur irgendwie zeigt er mir keinen Iframe an?! Die Bilder des Browsergames verschwinden auch, teilweise.

Kann mir da jemand weiterhelfen? Wär echt klasse.
 
Wir sind hier nicht beim lustigen Ratequiz!
Wie sieht dein bisheriger Code aus?
Was genau funktioniert nicht?
Was sagt die Fehlerkonsole?
 
Code:
// ==UserScript==
// @name           name
// @namespace      namespace
// @description    beschreibung
// @include        http://www.dieadresse.de/*

// ==/UserScript==

document.write("<iframe src='adresse_zur_php_seite' width='100' height='100'></iframe>");

So, das war der Code. Die Fehlerkonsole gibt folgende Meldungen:
Code:
Fehler: Component returned failure code: 0x80004003 (NS_ERROR_INVALID_POINTER) [nsIDOMNSHTMLDocument.write]
Quelldatei: pfad_vom_pc/script.user.js
Zeile: 9

Code:
Fehler: Component returned failure code: 0x80004003 (NS_ERROR_INVALID_POINTER) [nsIDOMNSHTMLDocument.write]
Quelldatei: pfad_vom_pc/script.user.js
Zeile: 9

Das heißt also, das ein Fehler bei document.write ist. Aber leider kenn ich mich nicht so wirklich aus mit JS. Deshalb hoffe ich auf eure Hilfe.

//EDIT: Des Weiteren tauchen noch Fehler auf, die das Browsergame betreffen. Diese tauchen auch nur auf, wenn ich Greasemonkey mit meinem "Script" aktiviert habe.

Wie zum Beispiel:
Code:
Warnung: Fehler beim Verarbeiten des Wertes für Eigenschaft 'font-style'.  Deklaration ignoriert.
Quelldatei: quelldatei.css
Zeile: 132
 
Zuletzt bearbeitet:
document.write geht nicht, da ein Greasemonkey Skript erst aufgerufen wird, wenn das Dokument fertig geladen ist, würdest du damit das komplette Dokument überschreiben, was sicher nicht der Sinn der Sache ist.

Du musst mit document.createElement arbeiten.
 
Also document.write ist prinzipiell keine gute Lösung.

Anscheinend hat Greasemonkey auch noch eine Beschränkung diesbezüglich. Deswegen rate ich dir mit DOM zu arbeiten (document.createElement, document.body.appendChild etc.)
 
Quasi, wie das hier. Einfach in ein DIV einfügen lassen?!

Code:
var myH1 = document.createElement("h1");
var myText = document.createTextNode("de.selfhtml.org - SelfHTML");
myH1.appendChild(myText);
var Ausgabebereich = document.getElementById("Bereich");
Ausgabebereich.appendChild(myH1);
 
Also könnte ich es praktisch so machen:

Code:
var myiframe = document.createElement("iframe");
var myText = document.createTextNode("<iframe name='loader' src='pfad_zur_php_seite/script.php' width='100' height='100></iframe>");
myiframe.appendChild(myText);
var Ausgabebereich = document.getElementById("Bereich");
Ausgabebereich.appendChild(myiframe);

//EDIT:

Die Fehlerkonsole gibt mir aber immernoch folgendes aus:
Code:
Fehler: nicht wohlgeformt
Quelldatei: pfad_zum_script/script.user.js
Zeile: 1, Spalte: 1
Quelltext:
// ==UserScript==

Mein Script sieht jetzt so aus:
Code:
// ==UserScript==
// @name           name
// @namespace      namespace
// @description    ---
// @include        adresse
// ==/UserScript==

var myiframe = document.createElement("iframe");
var myText = document.createTextNode("<iframe name='loader' src='pfad_zur_php_seite/script.php' width='100' height='100></iframe>");
myiframe.appendChild(myText);
var Ausgabebereich = document.getElementByID("white");
Ausgabebereich.appendChild(myiframe);
Wobei es sich bei "white" um ein <td>-Tag handelt:
Code:
<td valign=top width=100% class=white>
 
Zuletzt bearbeitet:
Nein, mit createElement erzeugst du schon die HTML-Node.
Du musst nur noch die Attribute setzen.

hmm... Jetzt bin ich verwirrt.


Mein Script sieht jetzt so aus:

Code:
// ==UserScript==
// @name           name
// @namespace      namespace
// @description    ---
// @include        adresse
// ==/UserScript==

var myiframe = document.createElement("iframe");
var myText = document.createTextNode("<iframe name='loader' src='pfad_zur_php_seite/script.php' width='100' height='100></iframe>");
myiframe.appendChild(myText);
var Ausgabebereich = document.getElementByID("white");
Ausgabebereich.appendChild(myiframe);

Wobei es sich bei "white" um ein <td>-Tag handelt:
Code:
<td valign=top width=100% class=white>
 
Weist du, was eine Node ist? Wenn nicht: mach' dich im Netz schlau. Dann solltest du meinen Einwand verstehen.
 
EDIT: Habs jetzt anders gelöst. Vielleicht meintest du das ja.

Code:
// ==UserScript==
// @name           name
// @namespace      namespace
// @description    ---
// @include        http://*adresse.de/*
// ==/UserScript==

var myH1 = document.createElement("iframe");
var myText = document.createTextNode("name='loader' src='pfad_zum_php/script.php' width='100' height='100'");
myH1.appendChild(myText);
var Ausgabebereich = document.getElementById("toolbar");
Ausgabebereich.appendChild(myH1);

Alles schön und gut, aber der Iframe zeigt mir nicht die Seite an, die ich aufrufen möchte?!
Ich seh zwar den Frame, aber es scheint als wäre er durchsichtig.
 
Zuletzt bearbeitet:
Nein, du musst die Attribute setzen:
Code:
// ==UserScript==
// @name           name
// @namespace      namespace
// @description    ---
// @include        http://*adresse.de/*
// ==/UserScript==

var myH1 = document.createElement("iframe");
myH1.name = loader';
myH1.src = 'pfad_zum_php/script.php';
myH1.width = '100';
myH1.height = '100';
var Ausgabebereich = document.getElementById("toolbar");
Ausgabebereich.appendChild(myH1);
 
Achso. Ich jetzt versteh ich es ;)

Werd es gleich mal ausprobieren :)


EDIT: Soweit wie du es geschrieben hast, funktioniert es.
Wenn ich jetzt allerdings den Framerahmen weg haben möchte, passiert nichts:
Code:
myH1.frameborder = '0';
das kann doch nicht verkehrt sein, oder? In der Fehlerkonsole ist auch nichts davon zu lesen...?! Wird das einfach so ignoriert?

EDIT2: Wenn ich es mit style festlegen will, ist das Script angeblich "nicht wohlgeformt" oder manchmal auch einfach "not available" :)
 
Zuletzt bearbeitet:
Ich verstehe nicht, warum manches funktioniert und manches wiederrum nicht!?

Code:
myH1.scrolling = 'no';   <== funktioniert
myH1.frameborder = 'no';   <== funktioniert nicht
myH1.border = '0';   <== funktioniert nicht
myH1.framespacing = '0';   <== funktioniert nicht

Ich weiß nicht, wie ich es einsetzen soll. Ich hab schon gegoogelt und alles mögliche, komme aber zu keinem richtigen ergebnis. :(
 
EDIT2: Wenn ich es mit style festlegen will, ist das Script angeblich "nicht wohlgeformt" oder manchmal auch einfach "not available" :)
Wer sagt das?
ich würde es über CSS machen.

Dass framespacing und border nicht gehen ist klar - diese Attribute hat ein iFrame gar nicht.
Frameborder geht wahrscheinlich nicht, weil du einen falschen wert zu weist - dud musst entweder 0 oder 1 zuweisen.
 
Wer sagt das?
ich würde es über CSS machen.
Die Fehlerkonsole ;)

Dass framespacing und border nicht gehen ist klar - diese Attribute hat ein iFrame gar nicht.
Stimmt :eek:

Frameborder geht wahrscheinlich nicht, weil du einen falschen wert zu weist - dud musst entweder 0 oder 1 zuweisen.
Alles schon versucht, es klappt einfach nicht.

Doch wie setze ich dort CSS ein? Das wird sich sicherlich nicht so einfach gestalten wie beim normalen programmieren, oder??
 
Zurück
Oben