我正在尝试将某个脚本与页面上当前加载的脚本匹配:
if($('script[src="' + sn + '"]').length == 0)
$('head').append('<scr' + 'ipt src="' + sn +'"></scr' + 'ipt>');
这只适用于正常加载的脚本。
对于使用javascript注入的脚本,例如我的情况下的脚本,它不起作用:(
显然,以这种方式加载的脚本在DOM中是不可见的,即使它们运行。
答案 0 :(得分:4)
var isThere = false;
$("script").each(function() {
if ($(this).attr("src") == sn) {
isThere = true;
// this works also with injected scripts!!
}
});
if (isThere === false) {
$('head').append('<scr' + 'ipt src="' + sn +'"></scr' + 'ipt>');
}
答案 1 :(得分:2)
无法可靠地知道已加载了哪些脚本元素,因为一旦加载并执行了脚本元素,就可以删除它对文档的影响为零。此外,插入使用 innerHTML 属性的脚本元素不会被执行,因此它们的存在毫无意义(或多或少)。
您所能做的就是获取文档中当前脚本元素的列表,您无法可靠地知道哪些脚本元素已被加载甚至已执行。
答案 2 :(得分:1)
为什么不测试脚本中是否存在某些内容(例如全局变量名,全局对象或函数名)。
if (!window.functionName) {
// script holding functionName must not be present so load it dynamically
}
答案 3 :(得分:0)
嘿,您可以使用 PerformanceAPI:
https://developer.mozilla.org/en-US/docs/Web/API/Performance/getEntries