有没有一个更简单的(本机也许?)方法,包括一个外部脚本文件在谷歌Chrome浏览器?
目前我是这样做的:
document.head.innerHTML += '<script src="http://example.com/file.js"></script>';
有没有一个更简单的(本机也许?)方法,包括一个外部脚本文件在谷歌Chrome浏览器?
目前我是这样做的:
document.head.innerHTML += '<script src="http://example.com/file.js"></script>';
当前回答
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);
其他回答
如果你刚开始学习javascript,不想花时间创建一个完整的网页,只是为了嵌入测试脚本,只需在Chrome浏览器的新选项卡中打开开发工具,然后单击控制台。
然后输入一些测试脚本:例如。
console.log('Aha!')
然后在每一行后按Enter(由Chrome提交执行)
或者加载你自己的“外部脚本文件”:
document.createElement('script').src = 'http://example.com/file.js';
然后调用你的函数:
console.log(file.function('驨ꍬ啯ꍲᕤ'))
测试在谷歌Chrome 85.0.4183.121
安装tampermonkey并添加以下UserScript,带有一个(或多个)@match和特定页面url(或所有页面的匹配: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并刷新。
这种解决方案可以防止名称空间污染。您可以使用自定义名称空间来避免意外覆盖页面上现有的全局变量。
appendChild()是一种更原生的方式:
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = 'script.js';
document.head.appendChild(script);
如果任何人,因为他的脚本违反了script-src的“内容安全策略”或“因为不安全的eval'是不允许的”而加载失败,我将建议使用我的相当小的模块注入器作为dev-tools片段,那么你将能够像这样加载:
进口(“https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.24.0/moment.js”) 犹豫(()= > alert('今天是${时刻().format (dddd)} ')); < script src = " https://raw.githack.com/shmuelf/PowerJS/master/src/power-moduleInjector.js " > < /脚本>
这个解决方案是可行的,因为:
它在xhr中加载库-这允许从控制台进行CORS,并避免了script-src策略。 它使用xhr的同步选项,允许您停留在控制台/代码片段的上下文中,因此您将有权限对脚本进行评估,而不会被视为不安全的评估。
作为上面@maciej-bukowski的回答^^^的后续,在目前(2017年春季)支持async/await的现代浏览器中,您可以按以下方式加载。在这个例子中,我们加载了load html2canvas库:
异步函数loadScript(url) { Let response = await fetch(url); Let script = await response.text(); eval(脚本); } 让scriptUrl = 'https://cdnjs.cloudflare.com/ajax/libs/html2canvas/0.4.1/html2canvas.min.js' loadScript (scriptUrl);
如果你运行这个代码片段,然后打开浏览器的控制台,你会看到html2canvas()函数现在已经定义了。