Carico remoto file JavaScript tramite la barra degli indirizzi
-
04-10-2019 - |
Domanda
E 'possibile caricare i file JavaScript remoti dalla barra degli indirizzi?
Ho cercato di mettere questo nella barra degli indirizzi:
javascript:src='http://depot.com/file.js';funcname();
Non sto usando questo per le cose cattive. Sto solo testando il mio sito, questo è tutto. Se si voleva proteggere il vostro sito è necessario imparare ad attaccare per primo, giusto?
Soluzione
Credo che si dovrebbe essere in grado di fare quanto segue:
javascript:(function () {
var newScript = document.createElement('script');
newScript.type = 'text/javascript';
newScript.src = 'http://depot.com/file.js';
document.getElementsByTagName('body')[0].appendChild(newScript);
})();
Ecco un esempio molto utile (incolla questo nella barra degli indirizzi):
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:
In realtà, questo è il modo cornify.com è compreso gli script remoti nella loro bookmarklet.
UPDATE:
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);
})();
Quando la file_run.js
comprende semplicemente una chiamata a funcname()
.
Altri suggerimenti
Non direttamente una risposta, ma utile comunque.
Ecco uno script per caricare un file javascript quando viene utilizzato in un segnalibro:
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);
Non c'è un modo diretto di fare questo, però un hack comune è quello di eseguire poche righe di JavaScript che inserisce una tag nella pagina corrente, impostando il suo attributo src all'URL dello script che si desidera eseguire:
javascript:var s=document.createElement("script");s.src="http://depot.com/file.js";s.type="text/javascript";document.getElementsByTagName("body")[0].appendChild(s);
Se si desidera eseguire una funzione definita nel file remoto (à la funcname()
in questione), che è un po 'più complicato. Questo perché il caricamento di script tramite un tag è gestito in modo asincrono e così di file molto probabilmente ha caricamento non finito immediatamente aggiungendo l'elemento al DOM. L'unico modo che posso pensare di ottenere intorno a questo è quello di definire una funzione prima di inserire l'elemento, che poi chiama alla fine del file sorgente incluso:
function doStuff() {
// run code that depends on the included JS file
};
// include the external script, as per the snippet above
Si sarebbe quindi includere una chiamata a doStuff
alla fine del file incluso:
if(doStuff) doStuff();
L'aspetto del risultato finale qualcosa di simile:
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);