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

时间:2012-04-03 11:25:18

标签: javascript dom userscripts

我的用户脚本具有以下代码

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

我将此包含在内,以了解我访问的每个页面的脚本数量。

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

例如,当我访问此链接Help extracting text from html tag with Java and Regex

我在firefox中获得的脚本数量为:17,在chrome中为:15

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

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

我能知道为什么会这样吗

3 个答案:

答案 0 :(得分:0)

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

那么你的用户什么时候(Opera或FF的傻瓜?)被执行了? onDOMready并非所有脚本都需要可用。在Opera中,我会在onBeforeScript event上挂一个计数器。

由于您没有查看同一页面,因此您可能会在ff和chrome中获得不同的计数。返回给你的html会受到登录状态(cookies)和浏览器字符串的影响。特别是动态加载的脚本可能在浏览器之间有所不同。

答案 1 :(得分:0)

您可以先使用现有方法计算页面加载时可用的脚本数量,然后在DOMNodeInsertedDOMNodeInsertedIntoDocument上挂钩,以计算其他脚本插入的脚本(异步加载) 。但是,考虑到每个触发自定义处理程序,挂钩到DOMNodeInserted会使页面变得非常慢。单。时间。东西被添加到DOM。

我建议将你的计算设置为开始说,比它晚半秒。

答案 2 :(得分:0)

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

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

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