8 Stimmen

Greasemonkey, Website-Funktionen außer Kraft setzen

Ich habe viel gelesen und versuche seit etwa 5 Stunden, das hier fertig zu bekommen... hier ist es also

Ich möchte ein Skript schreiben, das eine Funktion dummy() {$.ajax(...)} überschreibt; auf einer Website überschreibt.

So versuche ich es zu machen

unsafeWindow.dummy = function(data){differantFunction(); $.ajax(...);};

function differantFunction(){
...
}

aber die Dummy-Funktion, die aufgerufen worden wäre, um etwas auf der ursprünglichen Seite zu tun... tut jetzt einfach nichts.

//aktualisieren

Ich habe versucht, die Funktion, die ich versuche, durch die Adressleiste zu überschreiben, um zu sehen, was falsch ist: (javascript:dummy("..");)

und ich erhalte eine Fehlermeldung, die mir sagt, dass $ undefiniert ist, aber ich habe Jquery auf der Website und im Userscript... ich bin so verloren im Moment

12voto

w35l3y Punkte 7996

Dies geschieht, weil das Skript im GM-Bereich ausgeführt wird.
Wenn Sie keine GM-Funktion verwenden (wie GM_setValue o GM_xmlhttpRequest ), empfehle ich Ihnen, Folgendes zu tun:

var script = document.createElement('script'); 
script.type = "text/javascript"; 
script.innerHTML = (<><![CDATA[

// YOUR CODE GOES HERE

]]></>).toString();
document.getElementsByTagName('head')[0].appendChild(script);

Schreiben Sie den Code wie ein normales Skript, nicht wie ein GM-Skript.
Ich meine, entfernen Sie alle unsafeWindow Referenzen und ähnliche Dinge.
Dadurch wird das Skript im richtigen Bereich ausgeführt.

ABER wenn Sie GM-Funktionen verwenden, dann müssen Sie Folgendes hinzufügen unsafeWindow vor jeder Variablen im normalen Geltungsbereich (wie $ ) oder machen Sie etwas wie das Folgende und beten Sie, dass es klappt:

$ = unsafeWindow.$;
//...

PS.: Mehrzeiliger String mit E4X wird nicht mehr unterstützt. Einige andere Optionen sind:
1) Fügen Sie Ihren Code in eine Funktion ein und verwenden Sie dann Function.prototype.toString
2) Erstellen Sie Ihren Code als separate Datei und dann fügen Sie es als Ressource
3) fügen Sie einen Backslash am Ende eines jeden Zeile

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X