ChromeコンソールにJavaScriptファイルまたはライブラリを含める方法は?


221

Google Chromeブラウザーに外部スクリプトファイルを含めるより簡単な(ネイティブでしょうか?)方法はありますか?

現在、私はそれを次のようにしています:

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

6
開発者ツールを開いたランダムなWebページにファイルを含める簡単な解決策が必要ですか?
クリスチャンテルネス

7
私はこれを行うためのアドオンを作成しました:google storeからダウンロード
w00d


私はこれを使用して、コンソールの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関数にラップして、次のように使用します。script.type = 'text / javascript'; script.src =パス; document.head.appendChild(script); } _loadScript( ' documentcloud.github.com/underscore/underscore-min.js'); _loadScript( ' backbonejs.org/backbone-min.js');
Ajay Bhosale 2012

私は得た:TypeError: Property 'appendChild' of object #<HTMLHeadElement> is not a function
Muhammad Hewedy 2013

1
Ajay、ありがとうございます。ただし、構文エラーはほとんどありません。以下のテキストをコピーして貼り付け、コンソールにアンダースコアを付けます。または、他のlibを置き換える var _loadScript = function(path){var script = document.createElement( 'script'); script.type = 'text / javascript'; script.src =パス; document.head.appendChild(script); }; _loadScript( ' underscorejs.org/underscore-min.js');
TPAKTOPA 2015年

ありがとう!script.innerHTML = javascript_code</ code> を使用して直接javascriptコードを挿入しました
Jonathan_Ng

91

AJAXフレームワークを使用していますか?jQueryを使用すると、次のようになります。

$.getScript('script.js');

フレームワークを使用していない場合は、Harmenの回答を参照してください。

(たぶん、これを1つの単純なことをするためだけにjQueryを使用する価値はありません(または多分それはそうです)が、すでにロードされている場合は、それを使用することもできます。既にロードされているjQueryを使用する代わりに、常に移植性のない方法でDOM APIを直接使用します。多くの人々はgetElementById()、すべてのブラウザーで一貫して機能しないことさえ知らない- この回答を参照してくださいを参照してください。 )

更新:

私がこの答えを書いてから何年も経っていますが、今日ここで使用できることをここで指摘する価値があると思います。

スクリプトを動的にロードします。これらは、この質問を読んでいる人に関係があるかもしれません。

参照:Guy BedfordによるFluent 2014の講演:ES6モジュールの実用的なワークフロー


どのフォルダーからスクリプトを読み込みますか?
Qwerty、2014年

4
あなたがそれを好き$.getScript('script.js');$.getScript('../scripts/script.js');それから使うなら、それはドキュメントに対して相対的ですが、それは同様に絶対的なURLをロードすることもできます。$.getScript('https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.6.0/underscore.js');
rsp 2014年

jqueryを使用する場合、ブックマークレットを作成してページにjqueryをインストールできます
。superuser.com/ questions / 1460015 /…

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:".
ヴァシリス

2
@Vassilis私はこれを確認しましたが、スニペットはChrome Canary(64.0.3241.0)でも動作します。
Maciej Bukowski 2017年

2
Vassilisの問題は、彼が使用しているアプリにコンテンツセキュリティポリシーが適用されているためだと思います。Chromeも私にとってはうまくいきます。
Solomons_Ecclesiastes

1
@Vassilisはこのエラーを回避するために私の回答のうなり声(stackoverflow.com/a/57814219/6553339)を使用しています
shmulik friedman

16

Chromeでは、開発者ツールの[ソース]の下にある[スニペット]タブが最適なオプションです。

これにより、たとえば、about:blankページでコードを記述して実行できます。

詳細はこちら:https : //developers.google.com/web/tools/chrome-devtools/debug/snippets/?hl=en


6
これにより理論的には質問に答えることができますが、ここに答えの本質的な部分を含め、参照用のリンクを提供することが望ましいでしょう
Enamul Hassan 2016

2
最初の2行は答えの本質的な部分だと思いました。Chromeでスニペットを取得する方法を正確に説明しています。次に、Googleのドキュメントを補足しました。
atirado

個人的には、これが最良の答えだと思います。現在のページに対してJavaScriptを保存して実行する簡単な方法も開発者に示されているためです...
Brad Parks

16

上記の @ maciej-bukowski ^^^の回答のフォローアップとして、async / awaitをサポートする現在(2017年春)の最新のブラウザーでは、次のようにロードできます。この例では、load 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
セキュリティポリシーにより、少なくともバージョン66以降のChromeの新しいタブページでは、これが機能しなくなります。キャッチされていない(約束どおり)EvalError: 'unsafe-eval'は、次のスクリプトの許可されたソースではないため、文字列をJavaScriptとして評価することを拒否されましたコンテンツセキュリティポリシーディレクティブ: "script-src 'strict-dynamic' ...
Tatsh

あなたのエラー(避けるために、私の答えを使用し@Tatsh stackoverflow.com/a/57814219/6553339
shmulikフリードマン

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

スクリプトがscript-srcの "コンテンツセキュリティポリシー"に違反しているため、または "unsafe-eval 'が許可されていないため"だれかがロードに失敗した場合は、かなり小さなモジュールインジェクターをdev-toolsのスニペットとして使用することを勧めします。その後、次のようにロードできます。

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 の同期オプションを使用するため、スクリプトを評価する権限があり、安全でない評価として扱われることはありません。

次のコンテンツセキュリティポリシーディレクティブに違反しているため、スクリプト ' raw.githack.com/shmuelf/PowerJS/master/src/… 'のロードを拒否しました: "script-src ...
ThomasRones

1

これを使用して、コンソールにkoノックアウトオブジェクトをロードします

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をインストール@matchし、特定のページURL(またはすべてのページの一致)を持つ1つ(または複数)の次のUserScriptを追加します。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を有効にして更新します。

このソリューションは、名前空間の汚染を防ぎます。カスタム名前空間を使用して、ページ上の既存のグローバル変数が誤って上書きされることを回避できます。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.