Greasemonkey Script injizieren
invrecon
- javascript
Hi zusammen
Ich habe jetzt geschafft was ich wollte. Mein Greasemonkey-Script funktioniert in Chrome wunderbar, wirft in Firefox aber immer ein "Component is not available". Es macht folgendes:
Es generiert einen neuen Button mit einem Text darauf, setzt seine Id und wenn der Button geklickt wird, injiziert es ein Javascript in die Seite, das in einer sehr langen Schleife ganz viel mal das auf der Seite bereits vorhandene Script ShowHint aufruft. Das Script wird in die Seite injiziert, ausgeführt und gleich danach wieder entfernt. Hier der Code:
var myButton = document.createElement("button");
var Text = document.createTextNode("Lösungen");
myButton.appendChild(Text);
myButton.setAttribute("id", "SolutionButton");
myButton.onclick = function() {
var script = document.createElement('script');
script.setAttribute("type", "application/javascript");
script.textContent = "for (var i = 0; i < 300; i++) {ShowHint();}";
document.body.appendChild(script);
document.body.removeChild(script);
}
document.getElementById("InstructionsDiv").appendChild(myButton);
Weiss jemand wieso das in Chrome wunderbar funzt und in Firefox eine Ausnahme wirft?
Gruss
invrecon
Weiss jemand wieso das in Chrome wunderbar funzt und in Firefox eine Ausnahme wirft?
Weil in GM die on(event) Schreibweise nicht akzeptiert wird.
Struppi.
Weil in GM die on(event) Schreibweise nicht akzeptiert wird.
Achso. Klar dass es in Chrome funktioniert, denn dort benutze ich nur etwas ähnliches wie Greasemonkey, nicht das Original. Offenbar unterstützt das Ding die on(event) Schreibweise. Ich bin leider ein ziemlicher Anfänger in JS, deshalb wäre ich froh, wenn du mir eine Alternative zu on(event) vorschlagen könntest.
invrecon
Jetzt hab ichs geschafft! Ich habe einen Weg gefunden, on(event) zu umgehen. Hier der Code:
var myButton = document.createElement("button");
var Text = document.createTextNode("Lösungen");
myButton.appendChild(Text);
myButton.setAttribute("id", "SolutionButton");
myButton.addEventListener("click", function()
{
var script = document.createElement('script');
script.setAttribute("type", "application/javascript");
script.textContent = "for (var i = 0; i < 300; i++) {ShowHint();}";
document.body.appendChild(script);
document.body.removeChild(script);
}, false);
document.getElementById("InstructionsDiv").appendChild(myButton);
Vielen Dank für eure Unterstützung!
invrecon