使用用户脚本从网页中提取脚本标记



我的用户脚本有以下代码

var scrpt=document.getElementsByTagName('script');

我加入这个是为了知道我访问的每个页面的脚本数量。

这适用于一些网站,但对于一些网站,我没有得到所有的脚本。我在firefox和chrome中都安装了用户脚本,问题是同一个网站在两种浏览器中的脚本数量不同。

例如,当我访问这个链接时,帮助用Java和Regex 从html标签中提取文本

我在firefox中得到的脚本数量是:17,在chrome中得到的是:15

但当我查看页面源时,有22个脚本标签

请帮我解决这个问题。我甚至尝试了document.scripts,但仍然得到了相同的结果。

我能知道为什么会发生这种情况吗?

您不查看页面源代码,而是检查您的DOM,对吗?源代码包括18个<script>标签(对我来说,手工计数),但还有其他标签是动态加载的(在控制台中执行document.getElementsByTagName('script').length时得到22个)。

那么,您的用户脚本(Opera或FF的油腔滑调?)是什么时候执行的呢?onDOM并非所有脚本都需要可用。在Opera中,我会在onBeforeScript事件上挂一个计数器。

你在ff和chrome中得到不同的计数可能是因为你看的不是同一个页面。返回给您的html将受到登录状态(cookie)以及浏览器字符串的影响。特别是动态加载的脚本可能因浏览器而异。

脚本不是其标记的内容,脚本标记更像是浏览器在src下载和评估文件的指令。

可以使用新的src属性添加、删除和重用脚本标记,更不用说可以使用ajax加载和评估的脚本了。

在某种程度上,无论从不同来源添加了多少文件,文档都只有一个脚本。

您可以使用现有的方法来计算页面加载时可用的脚本数量,然后在DOMNodeInsertedDOMNodeInsertedIntoDocument上使用钩子来计算其他脚本插入的脚本(异步加载)。然而,考虑到您的自定义处理程序每触发一次,挂钩到DOMNodeInserted可能会使页面变得非常慢。仅有一个的时间向DOM中添加了一些内容。

我建议你将计算设置为比实际时间晚半秒开始。

最新更新