getElementsByTagName和其他元素未返回应有的所有元素?

问题描述

我是JavaScript的新手,目前正在编写一个Tampermonkey脚本,该脚本从文档标头中检索<script>标签并对其进行编辑。它被设置为在页面上的所有其他脚本之前执行,因此我可以在其他脚本提取它们之前编辑一些配置值。尽管我需要在所有尝试过的网站上都使用该元素,但该脚本在某些网站上有效,但在其他网站上则无效。我正在使用document.head.getElementsByTagName('script')获取标题中的所有脚本标签,这些标签最终将进行迭代,但是它总是返回缺少几个标签的列表。这些是我现在正在运行的仅有的几行:

(function() {
    'use strict';
    var scptTags = document.head.getElementsByTagName('script');
    console.log(scptTags);
})();

起初,我认为我需要的元素最初并不存在,而是在页面加载期间被写入DOM的。但是,如果我卷曲文档,则可以看到该元素在那里。由于我正在document-start上运行脚本,因此它应该每次都能看到此标记,但事实并非如此。

我尝试使用其他几种方法包括遍历document.head.childNodes(也错过了几个元素)并搜索整个文档,而不仅仅是标题。当我在脚本中使用console.log(document.head.innerHTML);时,即使结束的</head></html>标签在那里,我仍可以看到标头不完整。

然后我注意到,如果我在Charles中暂停请求一会儿,然后再进入Chrome浏览器,那么就会在标题中加载更多标签,就像需要花费更多时间一样(这是在运行任何其他脚本之前)在页面上)。但是,为什么在浏览器将页面完全加载到内存之前执行脚本?看来如此随意和奇怪,以至于我一定想念一些东西。这是我的方法还是Chrome的问题?

我正在Ubuntu 20.10上使用最新版本的Chrome Dev(86.0.4229.0)。我在其中观察到此行为的页面之一是docs.google.com,尤其是在加载文档时。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)