2010-09-18 3 views
8

Ist es möglich, entfernte JavaScript-Dateien von der Adressleiste zu laden?Remote-JavaScript-Dateien über die Adressleiste laden

Ich habe versucht, diese in die Adressleiste zu setzen:

javascript:src='http://depot.com/file.js';funcname(); 

Ich verwende dies nicht für schlechte Dinge. Ich teste nur meine Seite, das ist alles. Wenn Sie Ihre Site schützen wollten, müssen Sie zuerst lernen, sie anzugreifen, oder?

+0

in die Adressleiste ... was meinst du? –

+1

Ich schätze, du benutzt das für schlimme Dinge ... "sei nicht böse" :) – Topera

+2

Was ist böse, wenn du ein paar Unicons hinzufügst? :) –

Antwort

9

Ich denke, Sie sollten in der Lage sein, Folgendes zu tun:

javascript:(function() { 
    var newScript = document.createElement('script'); 
    newScript.type = 'text/javascript'; 
    newScript.src = 'http://depot.com/file.js'; 
    document.getElementsByTagName('body')[0].appendChild(newScript); 
})(); 

Hier ist ein sehr nützliches Beispiel (fügen diese in die Adressleiste):

javascript:(function() { 
    var newScript = document.createElement('script'); 
    newScript.type = 'text/javascript'; 
    newScript.src = 'http://cornify.com/js/cornify.js'; 
    document.getElementsByTagName('body')[0].appendChild(newScript); 

    for (var i = 0; i < 5; i++) { 
    newScript = document.createElement('script'); 
    newScript.type = 'text/javascript'; 
    newScript.src = 'http://cornify.com/js/cornify_run.js'; 
    document.getElementsByTagName('body')[0].appendChild(newScript); 
    } 
})(); 

Voila:

Stack Overflow cornified

In der Tat ist dies cornify.com ist includ die Remote-Skripte in ihr Bookmarklet einfügen.


UPDATE:

Als @Ben noted in the other answer, es ist nicht so einfach, eine Funktion in Ihrem Remote-Skript definiert zu nennen. Ben schlägt eine Lösung für dieses Problem vor, aber es gibt auch eine andere Lösung, diejenige, die cornify verwenden. Wenn Sie http://cornify.com/js/cornify_run.js auschecken, werden Sie sehen, dass es nur einen Funktionsaufruf in dieser Datei gibt. Sie könnten Ihren funcname() Aufruf in einer separaten JavaScript-Datei platzieren, wie cornify tut, da Skriptblöcke garantiert in der Reihenfolge ausgeführt werden, in der sie eingefügt werden. Dann würden Sie beide Skripte beinhalten müssen, wie im folgenden Beispiel:

javascript:(function() { 
    var newScript = document.createElement('script'); 
    newScript.type = 'text/javascript'; 
    newScript.src = 'http://depot.com/file.js'; 
    document.getElementsByTagName('body')[0].appendChild(newScript); 

    newScript = document.createElement('script'); 
    newScript.type = 'text/javascript'; 
    newScript.src = 'http://depot.com/file_run.js'; 
    document.getElementsByTagName('body')[0].appendChild(newScript); 
})(); 

Wo die file_run.js einfach einen Anruf zu funcname() enthält.

+0

vielen Dank :) – kapitanluffy

+1

+1 für die ordentliche Grafik. – balupton

+0

so file_run.js funcname (params) richtig? – kapitanluffy

2

Es gibt keine direkte Möglichkeit, dies zu tun. Ein gebräuchlicher Hack besteht jedoch darin, ein paar Zeilen JavaScript auszuführen, die ein Tag in die aktuelle Seite einfügen und sein src-Attribut auf die URL des auszuführenden Skripts setzen:

javascript:var s=document.createElement("script");s.src="http://depot.com/file.js";s.type="text/javascript";document.getElementsByTagName("body")[0].appendChild(s); 

Wenn Sie eine Funktion definiert in der Remote-Datei (à la funcname() in Ihrer Frage) ausgeführt werden sollen, das ist ein wenig komplizierter. Dies liegt daran, dass das Laden von Skripten über ein Tag asynchron ausgeführt wird und die Datei daher höchstwahrscheinlich nicht sofort mit dem Laden des Elements zum DOM fertig ist. Die einzige Möglichkeit, die ich denken kann, um dieses zu bekommen ist eine Funktion zu definieren, bevor Sie das Element einfügen, die Sie dann am Ende der enthaltenen Quelldatei aufrufen:

function doStuff() { 
    // run code that depends on the included JS file 
}; 
// include the external script, as per the snippet above 

Sie würden dann einen Anruf zu doStuff umfassen am Ende der Datei enthalten:

if(doStuff) doStuff(); 

Das Endergebnis sieht wie folgt aus:

javascript:function doStuff(){funcname()};var s=document.createElement("script");s.src="http://depot.com/file.js";s.type="text/javascript";document.getElementsByTagName("body")[0].appendChild(s); 
+0

+1 für die Erwähnung des asynchronen Problems beim Aufruf von 'funcname()' ... Ich schlug eine andere Lösung in meiner Antwort vor (entlehnt von cornify). –

2

nicht direkt eine Antwort, aber hilfreich dennoch.

Hier ist ein Skript in einer Javascript-Datei zu laden, wenn in einem Lesezeichen verwendet:

javascript:var%20e=document.createElement('script');e.setAttribute('language','javascript');e.setAttribute('src','http://github.com/balupton/ajaxy-bookmark/raw/master/script.js');document.body.appendChild(e);void(0); 
Verwandte Themen