Chrome 콘솔에 JavaScript 파일 또는 라이브러리를 포함시키는 방법은 무엇입니까?


221

Chrome 브라우저에 외부 스크립트 파일을 포함시키는 더 간단한 방법이 있습니까?

현재 나는 다음과 같이하고있다 :

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

6
개발자 도구를 연 임의의 웹 페이지에 파일을 포함시키는 빠른 솔루션을 원하십니까?
Christian Tellnes

7
: 나는 추가 기능이 수행하는 만든 구글 스토어에서 다운로드
w00d


콘솔에서 녹아웃을로드하기 위해 이것을 사용합니다. document.write ( "<script src = ' cdnjs.cloudflare.com/ajax/libs/knockout/3.5.0/… )
Deepak Vishwakarma

불행히도 로컬 자바 스크립트 파일을 콘솔에로드 할 수있는 방법이 없으므로 Chrome에서는 로컬 파일을 사용할 수 없습니다.
Shayan

답변:


243

appendChild() 더 원시적 인 방법입니다.

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

15
Harman의 답변을 확장하기 위해 JS 함수를 감싸고 다음과 같이 사용합니다 ... var _loadScript = function (path) {var script = document.createElement ( 'script'); script.type = 'text / 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
무하마드 Hewedy에게

1
Ajay, 감사하지만 구문 오류가 거의 없습니다. 콘솔에 밑줄을 표시하려면 아래 텍스트를 복사 / 붙여 넣기하십시오. 또는 다른 lib를 대체하십시오. var _loadScript = function (path) {var script = document.createElement ( 'script'); script.type = 'text / javascript'; script.src = 경로; document.head.appendChild (스크립트); }; _loadScript ( ' underscorejs.org/underscore-min.js' );
TPAKTOPA

감사! 나는 javascript_code직접 자바 스크립트 코드를 삽입하기 위해 script.innerHTML = </ code>을 사용했다
Jonathan_Ng

91

AJAX 프레임 워크를 사용하십니까? jQuery를 사용하면 다음과 같습니다.

$.getScript('script.js');

프레임 워크를 사용하지 않으면 Harmen의 답변을 참조하십시오.

(아마도이 ​​간단한 일 ( 또는 아마도 ) 을하기 위해 jQuery를 사용할 가치 없지만 이미로드 한 경우 잘 사용할 수 있습니다 .jQuery 가로 드 된 웹 사이트를 예를 들어 Bootstrap으로로드했지만 여전히 이미로드 된 jQuery를 사용하는 대신 항상 이식 가능한 방식으로 DOM API를 직접 사용하십시오. 많은 사람들은 getElementById()모든 브라우저에서 일관되게 작동하지 않는다는 사실을 알지 못합니다 . 자세한 내용 은 이 답변 을 참조하십시오. )

최신 정보:

이 답변을 작성한 지 몇 년이 지났으며 오늘 여기서 사용할 수 있다고 지적 할 가치가 있다고 생각합니다.

스크립트를 동적으로로드합니다. 이 질문을 읽는 사람들과 관련이있을 수 있습니다.

참조 : ES6 모듈의 실제 워크 플로우 : 사나이 베드 포드에 의해 유창함 2014 이야기 .


어떤 폴더에서 스크립트를로드합니까?
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를 사용한다면, superuser.com/questions/1460015/…
barlop

38

최신 브라우저에서는 가져 오기 를 사용하여 리소스 ( Mozilla docs ) 를 다운로드 한 다음 평가하여 실행할 수 있습니다.

예를 들어 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)에서 작동합니다.
Maciej Bukowski

2
Vassilis 문제는 그가 사용하는 앱에 콘텐츠 보안 정책이 있기 때문이라고 생각합니다. 크롬도 저에게 효과적입니다.
Solomons_Ecclesiastes

1
@Vassilis 내 대답 울부 짖는 소리 (사용 stackoverflow.com/a/57814219/6553339을 이 오류를 방지하기 위해)
shmulik 프리드먼

16

크롬에서 가장 좋은 옵션은 개발자 도구의 소스 아래 스 니펫 탭일 수 있습니다.

예를 들어 about : blank 페이지에서 코드를 작성하고 실행할 수 있습니다.

자세한 내용은 https://developers.google.com/web/tools/chrome-devtools/debug/snippets/?hl=ko


6
이 이론적으로 질문에 대답 할 수 있습니다 동안, 바람직 할 것이다 여기에 대한 대답의 본질적인 부분을 포함하고 참조 할 수 있도록 링크를 제공합니다.
Enamul Hassan

2
첫 두 줄이 답의 핵심 부분이라고 생각했습니다. Chrome에서 스 니펫에 도착하는 방법을 정확하게 설명합니다. 그런 다음 Google 설명서를 보완했습니다.
atirado

예, 개인적으로 이것은 최고의 답변이라고 생각합니다. 개발자 및 현재 페이지에 대해 자바 스크립트를 저장하고 실행하는 쉬운 방법을 보여주기 때문에 ... 좋습니다!
Brad Parks

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
보안 정책으로 인해 버전 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

hes 스크립트가 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. 콘솔에서 CORS를 허용하고 script-src 정책을 피하는 xhr로 라이브러리를로드합니다 .
  2. xhr 의 동기 옵션을 사용하여 콘솔 / 스 니펫의 컨텍스트를 유지할 수 있으므로 스크립트를 평가하고 안전하지 않은 평가로 처리하지 않을 권한이 있습니다.

그것은 나를 위해 일을하지 않습니다 거부 스크립트 '로드 raw.githack.com/shmuelf/PowerJS/master/src/... '는 다음과 같은 콘텐츠 보안 정책 지침 위반 "스크립트 SRC는 ...
ThomasRones

1

이것을 사용 하여 콘솔에 ko knockout object 를로드 합니다.

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 (또는 모든 페이지와 일치하는 ) 이 있는 하나 이상의 다음 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.