Як включити файл JavaScript або бібліотеку в консоль Chrome?


221

Чи є простіший (можливо, рідний?) Спосіб включити зовнішній файл сценарію до браузера Google Chrome?

В даний час я роблю це так:

document.head.innerHTML += '<script src="http://example.com/file.js"></script>';

6
Ви маєте на увазі, що хочете швидке рішення включити файл на випадкову веб-сторінку, де ви відкрили Інструменти для розробників?
Крістіан Телнес

7
Я зробив надбудову для цього: скачайте з Google Store
w00d

2
можливий дублікат Load javascript через Firebug консоль
gak

Я використовую це для завантаження нокауту в консольному document.write ("<script src = ' cdnjs.cloudflare.com/ajax/libs/knockout/3.5.0/… )
Deepak

На жаль, немає можливості завантажити локальний файл JavaScript на консоль, Chrome не дозволить використовувати локальні файли.
Шаян

Відповіді:


243

appendChild() є ріднішим способом:

var script = document.createElement('script');
script.type = 'text/javascript';
script.src = 'script.js';
document.head.appendChild(script);

15
Щоб розширити відповідь Гармана, я обернув її навколо функції JS і використовую її наступним чином ... var _loadScript = функція (шлях) {var script = document.createElement ('script'); script.type = 'текст / javascript'; script.src = шлях; document.head.appendChild (скрипт); } _loadScript (' documentcloud.github.com/underscore/underscore-min.js' ); _loadScript (' backbonejs.org/backbone-min.js' );
Ajay Bhosale

Я отримав:TypeError: Property 'appendChild' of object #<HTMLHeadElement> is not a function
Muhammad Hewedy

1
Адже, дякую, але у вас синтаксична помилка. скопіюйте / вставте текст нижче, щоб підкреслити в консолі. Або замінити на інший lib var _loadScript = function (path) {var script = document.createElement ('script'); script.type = 'текст / javascript'; script.src = шлях; document.head.appendChild (скрипт); }; _loadScript (' underscorejs.org/underscore-min.js' );
TPAKTOPA

Дякую! Я використав script.innerHTML = javascript_code</code> для введення прямого коду javascript
Jonathan_Ng

91

Ви використовуєте якусь рамку AJAX? Використовуючи jQuery, це було б:

$.getScript('script.js');

Якщо ви не використовуєте жодної основи, дивіться відповідь Гармен.

(Можливо, не варто використовувати jQuery просто для того, щоб зробити цю просту річ ( а може, і є ), але якщо ви її вже завантажили, то можете також скористатися нею. Я бачив веб-сайти, які завантажують jQuery, наприклад, з Bootstrap, але все-таки використовуйте API DOM безпосередньо таким чином, який не завжди є портативним, замість того, щоб використовувати вже завантажений jQuery для цього, і багато людей не знають про те, що навіть getElementById()не працює стабільно у всіх браузерах - див. цю відповідь для подробиць. )

ОНОВЛЕННЯ:

Минуло роки, як я написав цю відповідь, і я вважаю, що тут варто зазначити, що сьогодні можна використовувати:

динамічно завантажувати сценарії. Вони можуть стосуватися людей, які читають це питання.

Дивіться також: Бесіда у 2014 році Гая Бедфорда: практичні робочі процеси для модулів ES6 .


З якої папки буде завантажений скрипт?
Qwerty

4
Якщо ви використовуєте його як, $.getScript('script.js');або $.getScript('../scripts/script.js');тоді він відносно документа, але він також може завантажувати абсолютні URL-адреси, наприклад. $.getScript('https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.6.0/underscore.js');
rsp

якщо ви використовуєте jquery, то ви можете зробити закладку для встановлення jquery на сторінці, superuser.com/questions/1460015/…
barlop

38

У сучасних веб-переглядачах ви можете скористатися файлом для завантаження ресурсу ( Mozilla docs ), а потім eval для його виконання.

Наприклад, щоб завантажити Angular1, вам потрібно набрати:

fetch('https://cdnjs.cloudflare.com/ajax/libs/angular.js/1.5.8/angular.min.js')
    .then(response => response.text())
    .then(text => eval(text))
    .then(() => { /* now you can use your library */ })

1
Останній Chrome забороняє використовувати evalповідомлення із таким повідомленням: VM1929:11 Uncaught (in promise) EvalError: Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of script in the following Content Security Policy directive: "script-src 'self' blob: filesystem: chrome-extension-resource:".
Vassilis

2
@Vassilis Я перевірив це, і фрагмент все ще працює в Chrome Canary (64.0.3241.0).
Мацей Буковський

2
Я думаю, що проблема Vassilis полягає в тому, що в застосуванні він використовує політику безпеки вмісту. Chrome працює і для мене.
Solomons_Ecclesiastes

1
@Vassilis використовуйте мою відповідь нижче ( stackoverflow.com/a/57814219/6553339 ), щоб уникнути цієї помилки
shmulik friedman

16

У хромі найкращим варіантом може бути вкладка "Знімки" в розділі Джерела в Інструментах для розробників.

Це дозволить писати та запускати код, наприклад, на порожній сторінці about:.

Більше інформації тут: https://developers.google.com/web/tools/chrome-devtools/debug/snippets/?hl=uk


6
Хоча це теоретично може відповісти на питання, бажано було б сюди включити істотні частини відповіді та надати посилання для довідки.
Енамул Хассан

2
Я подумав, що перші два рядки були важливою частиною відповіді. Вони точно описують, як дістатися до Snippets в Chrome. Потім я доповнив документацію Google.
атирадо

Так особисто, я вважаю, що це найкраща відповідь, оскільки це також показує розробники та простий спосіб зберегти та запустити будь-який JavaScript проти поточної сторінки ... приємно!
Бред Паркс

16

Як відповідь на відповідь @ maciej-bukowski вище ^^^ , в сучасних браузерах станом на сьогодні (весна 2017 року), які підтримують асинхронізацію / очікують, ви можете завантажити наступне. У цьому прикладі ми завантажуємо завантажувальну бібліотеку html2canvas:

async function loadScript(url) {
  let response = await fetch(url);
  let script = await response.text();
  eval(script);
}

let scriptUrl = 'https://cdnjs.cloudflare.com/ajax/libs/html2canvas/0.4.1/html2canvas.min.js'
loadScript(scriptUrl);

Якщо ви запустите фрагмент, а потім відкриєте консоль браузера, вам слід побачити функцію html2canvas (), яку зараз визначено.


2
Політика безпеки не дозволяє цьому працювати, принаймні, на новій вкладці Chrome, починаючи з версії 66. Uncaught (в обіцянні) EvalError: Відмовляється оцінювати рядок як JavaScript, оскільки "unsafe-eval" не є дозволеним джерелом сценарію в наступних Директива щодо політики щодо безпеки вмісту: "script-src" строго-динамічний "...
Татш,

@Tatsh використовувати моя відповідь , щоб уникнути вашої помилки ( stackoverflow.com/a/57814219/6553339 )
Шмулик Friedman

6
var el = document.createElement("script"),
loaded = false;
el.onload = el.onreadystatechange = function () {
  if ((el.readyState && el.readyState !== "complete" && el.readyState !== "loaded") || loaded) {
    return false;
  }
  el.onload = el.onreadystatechange = null;
  loaded = true;
  // done!
};
el.async = true;
el.src = path;
var hhead = document.getElementsByTagName('head')[0];
hhead.insertBefore(el, hhead.firstChild);

4

Якщо хтось не зможе завантажити, тому що він не порушує сценарій-src "Політика безпеки вмісту" або "тому, що небезпечний-eval" не дозволений ", я пораджу використовувати мій маленький модуль-інжектор як фрагмент інструментів розробки, тоді ви зможете завантажити так:

imports('https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.js')
  .then(()=>alert(`today is ${moment().format('dddd')}`));
<script src="https://raw.githack.com/shmuelf/PowerJS/master/src/power-moduleInjector.js"></script>

це рішення працює, оскільки:

  1. Він завантажує бібліотеку в xhr - що дозволяє CORS з консолі та уникає політики script-src.
  2. Він використовує синхронний параметр xhr, який дозволяє вам залишатися в контексті консолі / фрагмента, тому ви будете мати дозвіл на оцінку сценарію, а не на трактування як на небезпечний-eval.

Для мене це не працює: відмовились завантажувати скрипт ' raw.githack.com/shmuelf/PowerJS/master/src/… ', оскільки він порушує таку директиву щодо політики безпеки вмісту: "script-src ...
ThomasRones

1

Я використовую це , щоб завантажити об'єкт нокауту в консолі

document.write("<script src='https://cdnjs.cloudflare.com/ajax/libs/knockout/3.5.0/knockout-3.5.0.debug.js'></script>");

або провести місцево

document.write("<script src='http://localhost/js/knockout-3.5.0.debug.js'></script>");

0

Встановіть tampermonkey та додайте наступний UserScript з одним (або більше) @matchіз конкретним URL-адресою сторінки (або збігом усіх сторінок :), https://*наприклад:

// ==UserScript==
// @name         inject-rx
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  Inject rx library on the page
// @author       Me
// @match        https://www.some-website.com/*
// @require      https://cdnjs.cloudflare.com/ajax/libs/rxjs/6.5.4/rxjs.umd.min.js
// @grant        none
// ==/UserScript==

(function() {
    'use strict';
     window.injectedRx = rxjs;
     //Or even:  window.rxjs = rxjs;

})();

Кожен раз, коли вам потрібна бібліотека на консолі чи фрагменті, увімкніть певний UserScript та оновіть.

Це рішення запобігає забрудненню простору імен . Ви можете використовувати спеціальні простори імен, щоб уникнути випадкового перезапису існуючих глобальних змінних на сторінці.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.