Загрузить внешний JS из букмарклета?

Как я могу загрузить внешний файл JavaScript с помощью букмарклета? Это позволило бы преодолеть ограничения IE на длину URL и, как правило, сохранить чистоту.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
73
0
20 086
4
Перейти к ответу Данный вопрос помечен как решенный

Ответы 4

Ответ принят как подходящий

Обновление 2015 г.

Политика безопасности контента предотвратит работу этого на многих сайтах сейчас. Например, приведенный ниже код не будет работать в Facebook.

2008 ответ

Используйте букмарклет, который создает тег скрипта, включающий ваш внешний JS.

В качестве образца:

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

Просто интересно, почему он заключен в вызов функции, а не просто: javascript: document.body.appendChild (document.createElement (‌ 'script')). Src = '** URL вашего внешнего файла здесь ** ';

Mark 12.12.2010 21:34

Попробуй и увидишь! Если оставить его как javascript: a = b, откроется страница с надписью «b». Это произойдет, если вы не аннулируете свой код, поместив его в функцию, которая ничего не возвращает, или передав его в пустота(...).

Miguel Ventura 13.12.2010 15:37

Кроме того, если исходная страница использует глобальную переменную а, ваш а = б не перезапишет ее, если она у вас есть в функции

nico gawenda 29.01.2013 12:02

Нет необходимости настраивать функцию загрузки, чтобы вы знали, когда можно вызывать функции в сценарии ???

Michael 14.01.2014 04:36

политика безопасности контента помешает этому сейчас работать на многих сайтах

Michael 31.12.2014 02:21

@Michael: этот метод действительно работает в Chrome на этой странице, но не работает в Facebook. Вот код букмарклета: javascript:(function(){document.body.appendChild(document.cr‌​eateElement('script'‌​)).src='http://danda‌​scalescu.com/static/‌​bm.js';})();

Dan Dascalescu 07.05.2015 22:36

Firefox и, возможно, другие поддерживают многострочные букмарклеты, без необходимости использования одного лайнера. Когда вы вставляете код, он просто заменяет новые строки пробелами.

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

Пример

Это не сработает, например, если вы находитесь на Facebook.com.

Dan Dascalescu 07.05.2015 22:47

Я всегда предпочитаю использовать популярный проект с открытым исходным кодом 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.info('something to run after the script was loaded');
    });

Если я могу добавить метод, протестированный в FF & Chrome (для разбивки на несколько строк):

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

Другие вопросы по теме