如何从javascript下载外部javascript库依赖项?
情景: 我有一个用户可配置的脚本。例如,代码路径如何从javascript下载外部javascript库依赖项?,javascript,Javascript,情景: 我有一个用户可配置的脚本。例如,代码路径A使用普通javascript,路径B使用jquery 代码 function MyFunction(choice) { if (choice == a) { //do some stuff } if (choice == b) { // somehow load jquery // do stuff that depends on jquery being loaded
A
使用普通javascript,路径B
使用jquery
代码
function MyFunction(choice) {
if (choice == a) {
//do some stuff
}
if (choice == b) {
// somehow load jquery
// do stuff that depends on jquery being loaded
}
}
我的困惑在路径
b
中<默认情况下,code>Jquery不在页面上(即页面上的任何位置都没有
)。但是路径B中的代码需要它来运行。是否可以加载JQuery,然后执行其余的代码 您可以修改DOM,只需将脚本添加到头部(或其他任何地方)。这就是Facebook、Google Analytics/Plus和其他许多网站的工作方式
以下是分析代码的示例:
<script>
(function(i,s,o,g,r,a,m){i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o)[0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google-analytics.com/analytics.js','ga');
ga('create', 'UA-id-here', 'auto');
ga('send', 'pageview');
</script>
添加后,中的参数将变为:
a=document.createElement('script')
那么这部分,
m=s.getElementsByTagName(o)[0];
a.async=1;
a.src=g;
m.parentNode.insertBefore(a,m)
查找文档中其他脚本的位置(第1行),将其设置为异步加载(第2行),将源设置为g
参数,该参数为'//www.google-analytics.com/analytics.js'
,最后插入它(第4行)
下面是一个简单的示例,其中包含一个onload
侦听器,以便您知道它何时准备就绪:
var script=document.createElement('script');
script.async=1;
script.src='//www.google-analytics.com/analytics.js';
script.onload=函数(){
警报('已加载脚本!');
}
document.body.appendChild(脚本)代码>我有一个解决方案。
仅仅因为您的代码中已经加载了jQuery,并不意味着您必须使用它。你两者都可以。你的问题是你需要在你的页面上有jQuery!这是你的头元素:
我想这解决了你的问题。如果没有,请提供更多细节。祝你好运 创建一个
标记并将其附加到DOM中,如下所示:
var script = document.createElement('script');
script.src = '/path/to/my/script.js';
document.body.appendChild(script);
script.onload = function () {
console.log('Ready!');
// Write your code that needs jQuery inside here
};
但这只能被视为一种临时解决方案……:) 那么,一旦我将它添加到头部,是否有一种好方法可以检查它何时下载,并且我可以运行我的其余代码?您应该能够使用onload
和onreadystatechange
来检查它是否已加载。添加了一个实时示例,以便您可以在实际操作中看到它。jQuery实际上在$中使用ajax。getScript
函数可靠地触发onload
事件
var script = document.createElement('script');
script.src = '/path/to/my/script.js';
document.body.appendChild(script);
script.onload = function () {
console.log('Ready!');
// Write your code that needs jQuery inside here
};