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

fiei3ece  于 2023-01-30  发布在  jQuery
关注(0)|答案(5)|浏览(123)

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

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

这是有效的,但仅适用于正常加载的脚本。
对于使用javascript注入的脚本,如我的条件中的脚本,它不起作用:(
显然,以这种方式加载的脚本在DOM中是不可见的,即使它们运行。

z4iuyo4d

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

0dxa2lsx2#

不可能可靠地知道加载了哪些脚本元素,因为一旦加载并执行了脚本元素,就可以删除它,而不会对文档产生任何影响。此外,使用 innerHTML 属性插入的脚本元素不会执行,因此它们的存在(或多或少)是没有意义的。
您所能做的只是获取文档中当前脚本元素的列表,您无法可靠地知道哪些元素已经加载或执行。

ej83mcc0

ej83mcc03#

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

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

omqzjyyz5#

您可以检查条目数组

const entries = performance.getEntries();

此条目包括属性

// entries[0];

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

相关问题