我正在尝试将某个脚本与页面上当前加载的脚本进行匹配:
if($('script[src="' + sn + '"]').length == 0) $('head').append('<scr' + 'ipt src="' + sn +'"></scr' + 'ipt>');
这是有效的,但仅适用于正常加载的脚本。对于使用javascript注入的脚本,如我的条件中的脚本,它不起作用:(显然,以这种方式加载的脚本在DOM中是不可见的,即使它们运行。
z4iuyo4d1#
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>'); }
0dxa2lsx2#
不可能可靠地知道加载了哪些脚本元素,因为一旦加载并执行了脚本元素,就可以删除它,而不会对文档产生任何影响。此外,使用 innerHTML 属性插入的脚本元素不会执行,因此它们的存在(或多或少)是没有意义的。您所能做的只是获取文档中当前脚本元素的列表,您无法可靠地知道哪些元素已经加载或执行。
ej83mcc03#
为什么不测试脚本中是否存在某些内容(比如全局变量名、全局对象名或函数名)呢?
if (!window.functionName) { // script holding functionName must not be present so load it dynamically }
kt06eoxx4#
您可以使用PerformanceAPI:https://developer.mozilla.org/en-US/docs/Web/API/Performance/getEntries
omqzjyyz5#
您可以检查条目数组
const entries = performance.getEntries();
此条目包括属性
// entries[0]; { detail: null, duration: 1586, entryType: "measure", name: "Next.js-before-hydration", startTime: 0 }
5条答案
按热度按时间z4iuyo4d1#
0dxa2lsx2#
不可能可靠地知道加载了哪些脚本元素,因为一旦加载并执行了脚本元素,就可以删除它,而不会对文档产生任何影响。此外,使用 innerHTML 属性插入的脚本元素不会执行,因此它们的存在(或多或少)是没有意义的。
您所能做的只是获取文档中当前脚本元素的列表,您无法可靠地知道哪些元素已经加载或执行。
ej83mcc03#
为什么不测试脚本中是否存在某些内容(比如全局变量名、全局对象名或函数名)呢?
kt06eoxx4#
您可以使用PerformanceAPI:
https://developer.mozilla.org/en-US/docs/Web/API/Performance/getEntries
omqzjyyz5#
您可以检查条目数组
此条目包括属性