2010-02-08 5 views
5

Total Neuling über JS.kann kein externes Javascript mit einem Bookmarklet ausführen

Ich brauche ein externes Skript, das einige Elemente in der aktuellen Seite ändert, die darauf als Bookmarklet zugreifen.

Wenn ich das HTML-Quellcode der Web-Seite des Einfügen der folgende < script> Linien ändern:

s=document.createElement('script'); 
s.type='text/javascript'; 
s.src='script.js'; 
document.getElementsByTagName('head')[0].appendChild(s); 

es funktioniert gut. Aber wenn ich eine Javascript erstellen: Bookmarklet mit den gleichen Linien, erhalte ich eine leere Seite mit der folgenden Zeichenfolge:

[object HTMLScriptElement] 

während, wenn ich ein Bookmarklet Hinzufügen der Zeile

void(null); 

zu früheren , die Webseite wird nicht deaktiviert, aber das Skript wird nicht ausgeführt.

Warum?

Antwort

7

Eine gängige Praxis ist, einfach eine selbstausführende zu verwenden Funktion Ausdruck, so etwas wie dieses:

(function() { 
    var s=document.createElement('script'); 
    s.type='text/javascript'; 
    s.src='script.js'; 
    document.getElementsByTagName('head')[0].appendChild(s); 
}()); 

Bookmarklet:

javascript:(function(){var s=document.createElement('script');s.type='text/javascript';s.src='script.js';document.getElementsByTagName('head')[0].appendChild(s);}()); 

Die Funktion kehrt undefined (kein Rückgabewert geliefert) zu verhindern die Navigation.

Beachten Sie auch, dass dies die Erstellung globaler Variablen (wie s) vermeidet, die sich mit anderen auf der Seite verwendeten Variablen überlappen können, da alle Variablen im Bereich der anonymen Funktion erstellt werden.

+0

Immer noch nicht funktioniert. – chanchal1987