2010-02-08 11 views
5

Całkowicie nowicjusz o JS.nie można uruchomić zewnętrznego javascript za pomocą skryptozakładki

Potrzebuję użyć zewnętrznego skryptu, który modyfikuje niektóre elementy na bieżącej stronie uzyskując dostęp do niego jako skryptozakładki.

Gdybym modyfikować kod źródłowy HTML strony internetowej wstawienie następujących < script> linie:

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

to działa dobrze. Ale jeśli utworzyć javascript: bookmarkletu z tych samych liniach, mogę uzyskać pustą stronę z następującym ciągiem:

[object HTMLScriptElement] 

natomiast, jeśli tworzę bookmarkletu dodając linię

void(null); 

do poprzednich , strona internetowa nie znika, ale skrypt nie jest wykonywany.

Dlaczego?

Odpowiedz

7

Powszechną praktyką jest po prostu użyć samodzielnego wykonywania wyrażenie funkcyjne, coś takiego:

(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);}()); 

Funkcja zwróci undefined (nie zwraca wartości w zestawie) zapobieganie nawigacja.

Należy również pamiętać, że pozwoli to uniknąć tworzenia zmiennych globalnych (takich jak s), które mogą nakładać się z innymi zmiennymi używanymi na stronie, ponieważ wszystkie zmienne są tworzone w zakresie funkcji anonimowej.

+0

Nadal nie działa. – chanchal1987

Powiązane problemy