Como incluir arquivo ou biblioteca JavaScript no console do Chrome?


221

Existe uma maneira mais simples (nativa, talvez?) De incluir um arquivo de script externo no navegador Google Chrome?

Atualmente estou fazendo assim:

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

6
Quer dizer que você deseja que uma solução rápida inclua um arquivo em uma página da web aleatória em que você abriu as Ferramentas do desenvolvedor?
Christian Tellnes

7
Eu fiz um complemento para fazer isso: baixar da google store
w00d 19/10/12

2
possível duplicata de carga javascript via Firebug consola
gak

Eu uso isso para carregar nocaute no console document.write ("<script src = ' cdnjs.cloudflare.com/ajax/libs/knockout/3.5.0/… )
Deepak Vishwakarma

Infelizmente, não há como carregar um arquivo javascript local no console, o Chrome não permitirá que arquivos locais sejam usados.
Shayan

Respostas:


243

appendChild() é uma maneira mais nativa:

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

15
Para estender a resposta de Harman, envolvi-a em uma função JS e usei-a da seguinte forma ... var _loadScript = function (path) {var script = document.createElement ('script'); script.type = 'text / javascript'; script.src = caminho; document.head.appendChild (script); } _loadScript (' documentcloud.github.com/underscore/underscore-min.js' ); _loadScript (' backbonejs.org/backbone-min.js' );
precisa saber é o seguinte

Eu tenho:TypeError: Property 'appendChild' of object #<HTMLHeadElement> is not a function
Muhammad Hewedy 31/08

1
Ajay, obrigado, mas você tem alguns erros de sintaxe. copie / cole o texto abaixo para ter sublinhado no console. Ou substitua por outra lib var _loadScript = function (caminho) {var script = document.createElement ('script'); script.type = 'text / javascript'; script.src = caminho; document.head.appendChild (script); }; _loadScript (' underscorejs.org/underscore-min.js' );
TPAKTOPA

Obrigado! Eu usei script.innerHTML = javascript_code</code> para injetar código javascript direto
Jonathan_Ng

91

Você usa alguma estrutura AJAX? Usando jQuery, seria:

$.getScript('script.js');

Se você não estiver usando nenhuma estrutura, veja a resposta de Harmen.

(Talvez não valha a pena usar o jQuery apenas para fazer uma coisa simples ( ou talvez seja ), mas se você já o carregou, também pode usá-lo. Vi sites que têm o jQuery carregado, por exemplo, com o Bootstrap, mas ainda assim use a API DOM diretamente de uma maneira que nem sempre é portátil, em vez de usar o jQuery já carregado para isso, e muitas pessoas não sabem que nem sequer getElementById()funciona de maneira consistente em todos os navegadores - consulte esta resposta para obter detalhes. )

ATUALIZAR:

Faz anos desde que escrevi esta resposta e acho que vale a pena destacar aqui que hoje você pode usar:

carregar scripts dinamicamente. Isso pode ser relevante para as pessoas que estão lendo esta pergunta.

Veja também: A conversa fluente de 2014 de Guy Bedford: Fluxos de trabalho práticos para os módulos ES6 .


De qual pasta ele carregará o script?
Qwerty

4
Se você usá-lo como ele é $.getScript('script.js');ou $.getScript('../scripts/script.js');então relativo ao documento, mas também pode carregar URLs absolutos, por exemplo. $.getScript('https://cdnjs.cloudflare.com/ajax/libs/underscore.js/1.6.0/underscore.js');
Rsp

se estiver usando jQuery, então você poderia fazer um bookmarklet para instalar jquery na página, superuser.com/questions/1460015/...
barlop

38

Nos navegadores modernos, você pode usar a busca para baixar o recurso ( Mozilla docs ) e depois avaliar para executá-lo.

Por exemplo, para baixar o Angular1, você precisa digitar:

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
O Chrome mais recente não permite o uso de eval, com a seguinte mensagem: 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 11/11

2
@Vassilis Eu verifiquei isso e o snippet ainda funciona no Chrome Canary (64.0.3241.0).
Maciej Bukowski

2
Acho que o problema do Vassilis é porque existe uma política de segurança de conteúdo no aplicativo que ele está usando. O Chrome também funciona para mim.
Solomons_Ecclesiastes

1
@Vassilis usar minha resposta abaixo ( stackoverflow.com/a/57814219/6553339 ) para evitar esse erro
Shmulik Friedman

16

No chrome, sua melhor opção pode ser a guia Snippets em Origens nas Ferramentas do desenvolvedor.

Isso permitirá que você escreva e execute o código, por exemplo, em uma página em branco about:.

Mais informações aqui: https://developers.google.com/web/tools/chrome-devtools/debug/snippets/?hl=en


6
Embora isso possa teoricamente responder à pergunta, seria preferível incluir aqui as partes essenciais da resposta e fornecer o link para referência.
Enamul Hassan 23/08/16

2
Eu pensei que minhas duas primeiras linhas eram a parte essencial da resposta. Eles descrevem exatamente como acessar os Snippets no Chrome. Então eu complementei com a documentação do Google.
Atirado

Sim, pessoalmente, acho que essa é a melhor resposta, pois também mostra os desenvolvedores e a maneira fácil de salvar e executar qualquer javascript na página atual ... legal!
Brad Parks

16

Como acompanhamento da resposta de @ maciej-bukowski acima ^^^ , nos navegadores modernos a partir de agora (primavera de 2017) que suportam async / wait, você pode carregar da seguinte maneira. Neste exemplo, carregamos a biblioteca 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 você executar o snippet e abrir o console do navegador, deverá ver a função html2canvas () agora definida.


2
A política de segurança impede que isso funcione, pelo menos na página da nova guia do Chrome, a partir da versão 66. EvalError não detectado: recusou-se a avaliar uma sequência como JavaScript porque 'unsafe-eval' não é uma fonte de script permitida a seguir Diretiva de política de segurança de conteúdo: "script-src 'strict-dynamic' ..."
Tatsh

@Tatsh usar a minha resposta para evitar o seu erro ( 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 alguém falhar ao carregar porque o script hes viola o script-src "Política de segurança de conteúdo" ou "porque a segurança não é permitida", aconselharei o uso do meu injetor de módulo muito pequeno como um snippet de ferramentas de desenvolvimento, então você poderá carregar assim:

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>

esta solução funciona porque:

  1. Carrega a biblioteca no xhr - o que permite o CORS do console e evita a política script-src.
  2. Ele usa a opção síncrona do xhr, que permite que você permaneça no contexto do console / snippet, assim você terá a permissão para avaliar o script e não ser tratado como uma avaliação insegura.

Ele não funciona para mim: recusou-se a carregar o script ' raw.githack.com/shmuelf/PowerJS/master/src/… ' porque viola a seguinte diretiva de política de segurança de conteúdo: "script-src ...
ThomasRones

1

Eu uso isso para carregar o objeto nocaute ko no console

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

ou hospede localmente

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

0

Instale tampermonkey e adicione o seguinte UserScript a um (ou mais) @matchURL de página específico (ou a uma correspondência de todas as páginas :), https://*por exemplo:

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

})();

Sempre que você precisar da biblioteca no console ou em um snippet, ative o UserScript específico e atualize.

Esta solução evita a poluição do espaço para nome . Você pode usar espaços para nome personalizados para evitar a substituição acidental de variáveis ​​globais existentes na página.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.