2012-04-03 58 views
0

我userscript具有下面的代码提取脚本标记

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

我包括在此要知道每一页我访问的脚本数量。

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

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

我得到在Firefox的脚本数为:17个中和铬:15

但是当我查看网页的源文件有22个脚本标签

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

我能知道为什么会这样

+0

也许这些其他脚本标记稍后创建。考虑到脚本标记生成可以是动态的,并且从浏览器到浏览器不同,从执行到执行。如..一个博客软件,可以列出的所有文章中创建的每一个新的脚本“像在Facebook中”按钮。 – Tei 2012-04-03 11:34:34

回答

0

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

那么你的用户脚本(Opera或FF的greasemonkey?)何时执行? onDOM不是所有脚本都需要可用。在Opera中,我会钩上onBeforeScript event上的一个计数器。

您在ff和chrome中获得不同的计数可能会发生,因为您没有查看相同的页面。返回给你的html会受到登录状态(cookie)和浏览器字符串的影响。特别是动态加载的脚本可能因浏览器而异

+0

我的用户脚本在页面加载时执行 – user1275375 2012-04-03 11:49:40

+0

是的,从那时起,当其他脚本插入时不会触发它。你可以挂钩一个DOM操纵事件来捕捉它们。你的剧本对号码有什么作用? – Bergi 2012-04-03 11:59:59

+0

你可以举一个使用DOM操作事件来抓脚本的例子吗? – user1275375 2012-04-04 04:26:16

0

您可以先使用您现有的方法来统计页面加载时可用的脚本数量,然后通过挂钩DOMNodeInsertedDOMNodeInsertedIntoDocument来统计由其他脚本插入的脚本(异步加载)。但是,考虑到您的自定义处理程序每​​触发一次,挂钩到DOMNodeInserted都会导致页面非常慢。单。时间。东西被添加到DOM。

我会推荐的是设置你的计算开始说,比它迟半秒。

0

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

脚本标签可以添加,删除,并以新的SRC属性的重复使用,更不用说可以加载并使用Ajax处理脚本。

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