有没有可能知道脚本是如何被加载的?

3
假设我有一个脚本 source.js。 有两种方式来加载它:
  1. <script src="source.js"></script>
  2. 通过 document.createElementappendChild
source.js 内部是否可以知道加载的方式?

2
它们应该是相同的,脚本无需知道它是如何加载的,这真的没有理由。 - adeneo
1个回答

0
简单的回答:不行。
你可以改变 script 标签,增加一个额外的属性: <script src="source.js" data-scripttag="true"></script> 然后在你的 source.js 文件中,你可以查看标签上是否存在该属性。如果存在,则是通过脚本标签调用的。但是,我假设从问题中得知,你无法修改调用脚本的 HTML(第三方集成?)。
这个示例片段在 SO 中不起作用,但应该能够给出一种实现方式,如果你可以编辑 HTML 的话。

// foo.js

var scriptTags = document.querySelectorAll('[data-scripttag]');
if (scriptTags.length === 1) {
  // Called via script tag
} else {
  // injected
}
<script src="foo.js" data-scripttag="true"></script>

<script>
  var fs = document.getElementsByTagName('script')[0];
  var s = document.createElement('script');
  s.src = 'foo.js';
  fs.parentNode.insertBefore(s, fs)
</script>


1
如何从包含的文件中访问脚本标签的属性? - Vasan
好的,你可以获取所有具有指定数据属性 data-scripttag 的元素。你也可以通过其源属性找到该元素。 - Cjmarkham

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