75 Stimmen

Externes JS aus Bookmarklet laden?

Wie kann ich eine externe JavaScript-Datei mit einem Bookmarklet laden? Dies würde die URL-Längenbeschränkungen des IE überwinden und die Dinge generell sauberer halten.

99voto

Miguel Ventura Punkte 9926

Update 2015

Sicherheitspolitik für Inhalte verhindert, dass dies jetzt an vielen Standorten funktioniert. Der folgende Code funktioniert zum Beispiel nicht auf Facebook.

Antwort 2008

Verwenden Sie ein Bookmarklet, das ein Skript-Tag erstellt, das Ihr externes JS enthält.

Als Beispiel:

javascript:(function(){document.body.appendChild(document.createElement('script')).src='** your external file URL here **';})();

4voto

Zombo Punkte 1

Firefox und vielleicht auch andere unterstützen mehrzeilige Bookmarklets, so dass keine Einzeiler erforderlich sind. Wenn Sie den Code einfügen, werden lediglich Zeilenumbrüche durch Leerzeichen ersetzt.

javascript:
var q = document.createElement('script');
q.src = 'http://svnpenn.github.io/bm/yt.js';
document.body.appendChild(q);
void 0;

Beispiel

1voto

Tom Punkte 1890

Wenn ich hinzufügen kann Methode getestet in FF & Chrome (für Lesbarkeit auf mehrere Zeilen aufgeteilt):

javascript:var r = new XMLHttpRequest();
           r.open("GET", "https://...my.js", true);
           r.onloadend = function (oEvent) {
               new Function(r.responseText)();
               /* now you can use your code */
           };
           r.send();
           undefined

-2voto

naviram Punkte 1264

Ich ziehe es immer vor, ein beliebtes Open-Source-Projekt zu verwenden. loadjs

Sie ist browserübergreifend getestet und verfügt über mehr Funktionalität/Komfortmerkmale.

Der Code wird also wie folgt aussehen:

loadjs=function(){function e(e,n){var t,r,i,c=[],o=(e=e.push?e:[e]).length,f=o;for(t=function(e,t){t.length&&c.push(e),--f||n(c)};o--;)r=e[o],(i=s[r])?t(r,i):(u[r]=u[r]||[]).push(t)}function n(e,n){if(e){var t=u[e];if(s[e]=n,t)for(;t.length;)t[0](e,n),t.splice(0,1)}}function t(e,n,r,i){var o,s,u=document,f=r.async,a=(r.numRetries||0)+1,h=r.before||c;i=i||0,/(^css!|\.css$)/.test(e)?(o=!0,(s=u.createElement("link")).rel="stylesheet",s.href=e.replace(/^css!/,"")):((s=u.createElement("script")).src=e,s.async=void 0===f||f),s.onload=s.onerror=s.onbeforeload=function(c){var u=c.type[0];if(o&&"hideFocus"in s)try{s.sheet.cssText.length||(u="e")}catch(e){u="e"}if("e"==u&&(i+=1)<a)return t(e,n,r,i);n(e,u,c.defaultPrevented)},!1!==h(e,s)&&u.head.appendChild(s)}function r(e,n,r){var i,c,o=(e=e.push?e:[e]).length,s=o,u=[];for(i=function(e,t,r){if("e"==t&&u.push(e),"b"==t){if(!r)return;u.push(e)}--o||n(u)},c=0;c<s;c++)t(e[c],i,r)}function i(e,t,i){var s,u;if(t&&t.trim&&(s=t),u=(s?i:t)||{},s){if(s in o)throw"LoadJS";o[s]=!0}r(e,function(e){e.length?(u.error||c)(e):(u.success||c)(),n(s,e)},u)}var c=function(){},o={},s={},u={};return i.ready=function(n,t){return e(n,function(e){e.length?(t.error||c)(e):(t.success||c)()}),i},i.done=function(e){n(e,[])},i.reset=function(){o={},s={},u={}},i.isDefined=function(e){return e in o},i}();
loadjs('//path/external/js', {
    success: function () {
        console.log('something to run after the script was loaded');
    });

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