Загрузить внешний JS из букмарклета?
-
01-07-2019 - |
Вопрос
Как я могу загрузить внешний файл JavaScript с помощью букмарклета?Это позволило бы преодолеть ограничения IE на длину URL-адреса и, как правило, сделать все чище.
Решение
Обновление за 2015 год
Политика безопасности контента теперь это не позволит этому работать на многих сайтах.Например, приведенный ниже код не будет работать на Facebook.
ответ 2008 года
Используйте букмарклет, который создает тег script, включающий ваш внешний JS.
В качестве образца:
javascript:(function(){document.body.appendChild(document.createElement('script')).src='** your external file URL here **';})();
Другие советы
Firefox и, возможно, другие поддерживают многострочные букмарклеты, нет необходимости в одной строке.Когда вы вставляете код, он просто заменяет новые строки пробелами.
javascript:
var q = document.createElement('script');
q.src = 'http://svnpenn.github.io/bm/yt.js';
document.body.appendChild(q);
void 0;
Я всегда предпочитаю использовать популярный проект с открытым исходным кодом loadjs ( загрузка )
он прошел кроссбраузерное тестирование и обладает большей функциональностью и комфортом.
Таким образом, код будет выглядеть примерно так:
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');
});