Chrome konsoluna JavaScript dosyası veya kitaplığı nasıl eklenir?


221

Google Chrome tarayıcısına harici bir komut dosyası eklemenin daha basit (yerel olabilir mi) bir yolu var mı?

Şu anda böyle yapıyorum:

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

6
Yani, Geliştirici Araçlarını açtığınız rastgele bir web sayfasına dosya eklemek için hızlı bir çözüm mü istiyorsunuz?
Christian Tellnes

7
Bunu yapmak için bir eklenti yaptım: google store'dan indirin
w00d


Bunu konsol document.write ("<script src = ' cdnjs.cloudflare.com/ajax/libs/knockout/3.5.0/… ) ' a nakavt yüklemek için kullanıyorum
Deepak Vishwakarma

Maalesef, yerel bir javascript dosyasını konsola yüklemenin bir yolu yoktur, Chrome yerel dosyaların kullanılmasına izin vermez.
Shayan

Yanıtlar:


243

appendChild() daha doğal bir yol:

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

15
Harman'ın cevabını genişletmek için bir JS fonksiyonunun etrafına sardım ve aşağıdaki gibi kullandım ... var _loadScript = function (path) {var script = document.createElement ('script'); script.type = 'metin / javascript'; script.src = yol; document.head.appendChild (komut); } _loadScript (' documentcloud.github.com/underscore/underscore-min.js' ); _loadScript (' backbonejs.org/backbone-min.js' );
Ajay Bhosale

Ben aldım:TypeError: Property 'appendChild' of object #<HTMLHeadElement> is not a function
Muhammad Hewedy

1
Ajay, teşekkürler, ama çok az sözdizimi hatası var. konsolda alt çizgi için aşağıdaki metni kopyalayın / yapıştırın. Veya diğer lib var _loadScript = function (path) {var script = document.createElement ('script'); script.type = 'metin / javascript'; script.src = yol; document.head.appendChild (komut); }; _loadScript (' underscorejs.org/underscore-min.js' );
TPAKTOPA

Teşekkürler! javascript_codeDoğrudan javascript kodu enjekte etmek için script.innerHTML = </code> kullandım
Jonathan_Ng

91

AJAX çerçevesi kullanıyor musunuz? JQuery kullanarak:

$.getScript('script.js');

Herhangi bir çerçeve kullanmıyorsanız, Harmen'in cevabına bakın.

(Belki de sadece bu basit bir şey yapmak için jQuery kullanmaya değmez ( ya da belki de ) ama zaten yüklediyseniz o zaman da kullanabilirsiniz. JQuery, örneğin Bootstrap yüklü ama yine de DOM API'sini bunun için önceden yüklenmiş jQuery kullanmak yerine doğrudan her zaman taşınabilir olmayan bir şekilde kullanın ve birçok kişi getElementById()tüm tarayıcılarda tutarlı bir şekilde çalışmadığının farkında değildir - ayrıntılar için bu cevaba bakın. )

GÜNCELLEME:

Bu yanıtı yazmamın üzerinden yıllar geçti ve bence bugün kullanabileceğinizi belirtmek gerekir:

dinamik olarak yüklemek için. Bunlar bu soruyu okuyan kişilerle ilgili olabilir.

Ayrıca bkz: Guy Bedford'un Fluent 2014 konuşması: ES6 Modülleri için Pratik İş Akışları .


Komut dosyasını hangi klasörden yükleyecek?
Qwerty

4
Gibi kullanırsanız $.getScript('script.js');veya $.getScript('../scripts/script.js');o zaman belgeye göreli olarak kullanır, ancak mutlak URL'leri de yükleyebilir, örn. $.getScript('https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.6.0/underscore.js');
rsp

jquery kullanıyorsanız, o zaman sayfaya jquery yüklemek için bir yer işareti oluşturabilirsiniz, superuser.com/questions/1460015/…
barlop

38

Modern tarayıcılarda, kaynağı ( Mozilla dokümanları ) indirmek ve daha sonra yürütmek için değerlendirmek için getirmeyi kullanabilirsiniz .

Örneğin Angular1'i indirmek için aşağıdakileri yazmanız gerekir:

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
En son Chrome eval, aşağıdaki mesajla kullanımına izin vermiyor :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
@ Vasilis Bunu kontrol ettim ve pasaj hala Chrome Canary'de (64.0.3241.0) çalışıyor.
Maciej Bukowski

2
Bence Vassilis sorunu, kullandığı uygulamada bir içerik güvenliği politikası var. Chrome da benim için çalışıyor.
Solomons_Ecclesiastes

1
@ Vasilis bu hatayı önlemek için benim cevap feryat kullanın ( stackoverflow.com/a/57814219/6553339 )
shmulik friedman

16

Chrome'da en iyi seçeneğiniz Geliştirici Araçları'ndaki Kaynaklar'ın altındaki Parçacıklar sekmesi olabilir.

Örneğin, yaklaşık: boş bir sayfaya kod yazmanıza ve çalıştırmanıza olanak tanır.

Daha fazla bilgi burada: https://developers.google.com/web/tools/chrome-devtools/debug/snippets/?hl=tr


6
Bu teorik olarak soruyu cevaplayabilse de , cevabın temel kısımlarını buraya dahil etmek ve referans için bağlantı sağlamak tercih edilir.
Enamul Hassan

2
İlk iki satırımın cevabın temel parçası olduğunu düşündüm. Snippet'lerin Chrome'da nasıl alınacağını tam olarak açıklarlar. Sonra Google dokümanlarını tamamladım.
atirado

Evet kişisel olarak, bu en iyi cevap olduğunu düşünüyorum, çünkü aynı zamanda mevcut sayfaya karşı herhangi bir javascript kaydetmek ve çalıştırmak için devs ve kolay bir yol gösterir ... güzel!
Brad Parks

16

^^ mac'un üstündeki @ maciej-bukowski'nin cevabının bir devamı olarak, async / await'i destekleyen modern tarayıcılarda (ilkbahar 2017) aşağıdaki gibi yükleyebilirsiniz. Bu örnekte yük html2canvas kütüphanesini yüklüyoruz:

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);

Parçacığı çalıştırır ve ardından tarayıcınızın konsolunu açarsanız, html2canvas () işlevinin tanımlandığını görmelisiniz.


2
Güvenlik politikası bunun en azından 66 sürümünden itibaren Chrome yeni sekme sayfasında çalışmasını engeller . İçerik Güvenliği Politikası yönergesi: "script-src 'katı dinamik' ...
Tatsh

@ Hatanız hatadan kaçınmak için cevabımı kullan ( stackoverflow.com/a/57814219/6553339 )
shmulik 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

Hes betiği script-src "İçerik Güvenliği İlkesi" veya "güvensiz-değerlendirmeye 'izin verilmediği için" yüklenmediği takdirde, oldukça küçük modül enjektörünü dev-tools snippet'i olarak kullanmanızı öneririm, o zaman şu şekilde yükleyebilirsiniz:

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>

bu çözüm çalışır çünkü:

  1. Kitaplığı xhr biçiminde yükler - CORS'nin konsoldan kullanılmasına izin verir ve script-src ilkesini önler.
  2. Konsol / snippet'in bağlamında kalmanızı sağlayan senkronize xhr seçeneğini kullanır , böylece komut dosyasını değerlendirme iznine sahip olursunuz ve güvensiz bir değerlendirme olarak ele alınmazsınız.

Benim için çalışmıyor: Aşağıdaki İçerik Güvenliği Politikası yönergesini ihlal ettiği için ' raw.githack.com/shmuelf/PowerJS/master/src/… ' komut dosyasını yüklemeyi reddetti : "script-src ...
ThomasRones

1

Bu konsolu ko nakavt nesnesini yüklemek için kullanın

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

veya yerel olarak barındır

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

0

Tampermonkey'i yükleyin ve aşağıdaki UserScript'i, @matchbelirli sayfa URL'si (veya tüm sayfaların eşleşmesi ) içeren bir (veya daha fazla) ile ekleyin 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;

})();

Konsolda veya snippet'te kitaplığa ihtiyacınız olduğunda, belirli UserScript'i etkinleştirin ve yenileyin.

Bu çözüm ad alanı kirliliğini önler . Sayfadaki mevcut global değişkenlerin yanlışlıkla üzerine yazılmasını önlemek için özel ad alanlarını kullanabilirsiniz.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.