检查页面是否已经附加了JavaScript?

5

有没有方法可以通过文件名检查javascript文件是否已经附加到页面上。

例如:

if ("path-to-script/scriptname.js") already embeded
{
call related function
}
else
{
Append '<script src="path-to-script/scriptname.js" type="text/javascript"> </script> '
call related function
}

基本上我不希望同一页上有两个相同的脚本被附加。

1
根据使用情况,您可以反转条件,取消else,在加载脚本后仅在if-else块外部调用函数。 - user684934
可能重复问题 http://stackoverflow.com/questions/11599311/check-whether-all-the-jquery-files-are-loaded-then-run-the-div-related-to-it/11599351#11599351 - Netorica
@Mahan 这不是可能的重复。我的要求是不同的。谢谢。 - Kuldeep Daftary
6个回答

7

有时候你未必提前知道一个脚本包含哪些对象或函数,这种情况下,你可以搜索包含所需src的脚本标签。

使用jQuery:

$("script[src*='"+scriptName+"']");

没有使用jquery:

document.querySelector("script[src*='"+scriptName+"']");

Ben,希望你能给出一个完整的答案。如果(...),谢谢。 - Cymro

6

您需要测试脚本文件中实际函数是否存在,方法如下:

if (window.function_name) {
    // script loaded
} else {
    // script not loaded
}

那是使用函数名称完成的。我们有没有办法使用脚本的src来完成它? - Kuldeep Daftary

2

我同意@zathrus的观点,但我认为你应该使用requirejs来处理这种情况。这个想法是在执行代码之前必须获取依赖项。虽然你正在使用的方法可能有效,但你不能保证任何事情。

RequireJS将美妙地维护所有依赖项的加载。它也非常容易学习。


0

只需简单地检查库是否已定义,否则导入它:

if ( !jQuery ) {
    var s = document.createElement('script');
    s.type = 'text/javascript';
    document.body.appendChild(s);
    s.src = "path-to-script/scriptname.js";
    void(0);
}
// call function

0

我觉得这会对你有所帮助。

if (typeof scriptname== "undefined") {
   var e = document.createElement("script");
   e.src = "scriptname.js";
   e.type = "text/javascript";
   document.getElementsByTagName("head")[0].appendChild(e); 
}

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接