繁体   English   中英

如何获取已加载脚本的列表,包括动态加载的脚本

[英]How to get a list of loaded scripts, including the ones dynamically loaded

我正在尝试将某个脚本与页面上当前加载的脚本相匹配:

if($('script[src="' + sn + '"]').length == 0)
  $('head').append('<scr' + 'ipt src="' + sn +'"></scr' + 'ipt>');  

这有效,但仅适用于正常加载的脚本。

对于使用 javascript 注入的脚本,就像我的情况一样,它不起作用:(

显然,以这种方式加载的脚本在 DOM 中是不可见的,即使它们运行也是如此。

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>');
}

不可能可靠地知道加载了哪些脚本元素,因为一旦加载并执行了脚本元素,就可以在对文档零影响的情况下将其删除。 此外,使用innerHTML属性插入的脚本元素不会被执行,因此它们的存在是没有意义的(或多或少)。

您所能做的就是获取文档中当前脚本元素的列表,您无法可靠地知道哪些已加载甚至执行。

为什么不测试脚本中是否存在某些内容(例如全局变量名称、全局对象或函数名称)。

if (!window.functionName) {
    // script holding functionName must not be present so load it dynamically
}

您可以检查条目数组

const entries = performance.getEntries();

此条目包括属性

// entries[0];

{
  detail: null,
  duration: 1586,
  entryType: "measure",
  name: "Next.js-before-hydration",
  startTime: 0
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM