Come includere il file JavaScript o la libreria nella console di Chrome?


221

Esiste un modo più semplice (forse nativo?) Di includere un file di script esterno nel browser Google Chrome?

Attualmente lo sto facendo in questo modo:

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

6
Vuoi dire che vuoi una soluzione rapida per includere un file in una pagina Web casuale in cui hai aperto gli Strumenti per gli sviluppatori?
Christian Tellnes,

7
Ho fatto un componente aggiuntivo per fare questo: scarica da Google Store
w00d

2
gak

Lo uso per caricare knockout in console document.write ("<script src = ' cdnjs.cloudflare.com/ajax/libs/knockout/3.5.0/… )
Deepak Vishwakarma

Sfortunatamente non c'è modo di caricare un file javascript locale sulla console, Chrome non consente l'utilizzo di file locali.
Shayan,

Risposte:


243

appendChild() è un modo più nativo:

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

15
Per estendere la risposta di Harman, l'ho racchiusa in una funzione JS e la uso come segue ... var _loadScript = function (path) {var script = document.createElement ('script'); script.type = 'text / javascript'; script.src = percorso; document.head.appendChild (sceneggiatura); } _loadScript (' documentcloud.github.com/underscore/underscore-min.js' ); _loadScript (' backbonejs.org/backbone-min.js' );
Ajay Bhosale,

Ho ottenuto:TypeError: Property 'appendChild' of object #<HTMLHeadElement> is not a function
Muhammad Hewedy il

1
Sì, grazie, ma hai qualche errore di sintassi. copia / incolla il testo qui sotto, per avere il trattino basso nella console. Oppure sostituisci per altre lib var _loadScript = function (path) {var script = document.createElement ('script'); script.type = 'text / javascript'; script.src = percorso; document.head.appendChild (sceneggiatura); }; _loadScript (' underscorejs.org/underscore-min.js' );
TPAKTOPA,

Grazie! Ho usato script.innerHTML = javascript_code</code> per iniettare codice javascript diretto
Jonathan_Ng

91

Usi un framework AJAX? Usando jQuery sarebbe:

$.getScript('script.js');

Se non si utilizza alcun framework, vedere la risposta di Harmen.

(Forse non vale la pena usare jQuery solo per fare questa semplice cosa ( o forse lo è ) ma se lo hai già caricato, potresti anche usarlo. Ho visto siti Web che hanno caricato jQuery, ad esempio con Bootstrap ma comunque usa l'API DOM direttamente in un modo che non è sempre portatile, invece di usare jQuery già caricato per questo, e molte persone non sono consapevoli del fatto che persino getElementById()non funziona in modo coerente su tutti i browser - vedi questa risposta per i dettagli. )

AGGIORNARE:

Sono passati anni da quando ho scritto questa risposta e penso che valga la pena sottolineare che oggi puoi usare:

per caricare gli script in modo dinamico. Questi possono essere rilevanti per le persone che leggono questa domanda.

Vedi anche: The Fluent 2014 di Guy Bedford: Flussi di lavoro pratici per i moduli ES6 .


Da quale cartella caricherà lo script?
Qwerty,

4
Se lo usi come $.getScript('script.js');o $.getScript('../scripts/script.js');è relativo al documento ma può caricare anche URL assoluti, ad es. $.getScript('https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.6.0/underscore.js');
rsp,

se si utilizza jquery, è possibile creare un bookmarklet per installare jquery sulla pagina, superuser.com/questions/1460015/…
barlop

38

Nei browser moderni è possibile utilizzare il recupero per scaricare risorse ( documenti Mozilla ) e quindi eval per eseguirlo.

Ad esempio per scaricare Angular1 è necessario digitare:

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
L'ultimo Chrome non consente l'uso di eval, con il seguente messaggio: 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 Ho controllato questo e lo snippet funziona ancora in Chrome Canary (64.0.3241.0).
Maciej Bukowski,

2
Penso che il problema di Vassilis sia dovuto al fatto che sull'app che sta utilizzando è presente una politica di sicurezza dei contenuti. Chrome funziona anche per me.
Solomons_Ecclesiaste

1
@Vassilis usa la mia risposta qui sotto ( stackoverflow.com/a/57814219/6553339 ) per evitare questo errore
shmulik friedman

16

In Chrome, l'opzione migliore potrebbe essere la scheda Snippet in Fonti negli Strumenti per sviluppatori.

Ti permetterà di scrivere ed eseguire il codice, ad esempio, in una pagina vuota di about :.

Maggiori informazioni qui: https://developers.google.com/web/tools/chrome-devtools/debug/snippets/?hl=en


6
Sebbene ciò possa teoricamente rispondere alla domanda, sarebbe preferibile includere qui le parti essenziali della risposta e fornire il collegamento come riferimento.
Enamul Hassan,

2
Pensavo che le mie prime due righe fossero la parte essenziale della risposta. Descrivono esattamente come arrivare agli snippet in Chrome. Quindi ho completato la documentazione di Google.
Atirado,

Sì, personalmente, penso che questa sia la risposta migliore, in quanto mostra anche gli sviluppatori e un modo semplice per salvare ed eseguire qualsiasi javascript sulla pagina corrente ... bello!
Brad Parks,

16

Come seguito alla risposta di @ maciej-bukowski sopra ^^^ , nei browser moderni a partire da ora (primavera 2017) che supportano asincronizzazione / attendi che puoi caricare come segue. In questo esempio viene caricata la libreria 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);

Se esegui lo snippet e quindi apri la console del browser, dovresti vedere ora la funzione html2canvas ().


2
La politica di sicurezza impedisce che funzioni, almeno nella nuova scheda di Chrome dalla versione 66. Uncaught (promessa) EvalError: rifiutato di valutare una stringa come JavaScript perché 'unsafe-eval' non è una fonte di script consentita nel seguente Direttiva sulla politica di sicurezza dei contenuti: "script-src 'rigoroso-dinamico' ...
Tatsh

@Tatsh usare la mia risposta per evitare il vostro errore ( 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

Se qualcuno non riesce a caricarsi perché lo script hes viola la "Politica di sicurezza dei contenuti" di script-src o "perché non è consentito un controllo non sicuro", consiglierò di utilizzare il mio modulo-iniettore piuttosto piccolo come frammento di dev-tools, allora sarai in grado di caricare in questo modo:

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>

questa soluzione funziona perché:

  1. Carica la libreria in xhr - che consente a CORS dalla console ed evita la politica script-src.
  2. Utilizza l' opzione sincrona di xhr che ti consente di rimanere nel contesto della console / snippet, quindi avrai il permesso di valutare lo script e di non essere trattato come un non sicuro.

Non funziona per me: ha rifiutato di caricare lo script ' raw.githack.com/shmuelf/PowerJS/master/src/… ' perché viola la seguente direttiva sulla politica di sicurezza dei contenuti: "script-src ...
ThomasRones

1

Lo uso per caricare ko knockout object in console

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

o host locale

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

0

Installa tampermonkey e aggiungi il seguente UserScript con uno (o più) @matchcon l'URL specifico della pagina (o una corrispondenza di tutte le pagine :) ad https://*esempio:

// ==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;

})();

Ogni volta che è necessaria la libreria sulla console o su uno snippet abilitare UserScript specifico e aggiornare.

Questa soluzione previene l'inquinamento dello spazio dei nomi . È possibile utilizzare spazi dei nomi personalizzati per evitare la sovrascrittura accidentale delle variabili globali esistenti nella pagina.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.