是否有更简单的(可能是本机的?)方法来在 Google Chrome 浏览器中包含外部脚本文件?
目前我是这样做的:
document.head.innerHTML += '<script src="http://example.com/file.js"></script>';
是否有更简单的(可能是本机的?)方法来在 Google Chrome 浏览器中包含外部脚本文件?
目前我是这样做的:
document.head.innerHTML += '<script src="http://example.com/file.js"></script>';
appendChild()
是一种更原生的方式:
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = 'script.js';
document.head.appendChild(script);
你使用一些 AJAX 框架吗?使用 jQuery 将是:
$.getScript('script.js');
如果您没有使用任何框架,请参阅 Harmen 的答案。
(也许仅仅为了做这件简单的事情而使用 jQuery 是不值得的(或者它可能是)但是如果你已经加载了它,那么你也可以使用它。我见过加载了 jQuery 的网站,例如 Bootstrap 但仍然以一种并不总是可移植的方式直接使用 DOM API,而不是为此使用已经加载的 jQuery,而且许多人不知道即使getElementById()
在所有浏览器上都不能一致工作的事实- 请参阅此答案以获取详细信息。 )
我写这个答案已经好几年了,我认为值得在这里指出,今天您可以使用:
动态加载脚本。这些可能与阅读此问题的人有关。
在现代浏览器中,您可以使用fetch来下载资源(Mozilla docs),然后 eval 来执行它。
例如,要下载 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 */ })
作为^^^ 以上@maciej-bukowski 回答的后续,在目前(2017 年春季)支持 async/await 的现代浏览器中,您可以按如下方式加载。在这个例子中,我们加载了 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);
如果您运行该代码段,然后打开浏览器的控制台,您应该会看到函数 html2canvas() 现在已定义。
在 chrome 中,最好的选择可能是开发者工具中 Sources 下的 Snippets 选项卡。
它将允许您编写和运行代码,例如,在 about:blank 页面中。
更多信息:https : //developers.google.com/web/tools/chrome-devtools/debug/snippets/?hl=en