使用jQuery禁用页面上的所有内容。打破我的代码

时间:2011-02-19 15:40:12

标签: javascript jquery html testing dom

对于我当前的项目,我要求工具能够从页面中删除所有功能,以便它是完整的文字静态页面。删除跟踪任何链接的功能,禁用和javascript侦听器允许在页面上更改内容。这是我到目前为止的尝试:

$("*").unbind().attr("href", "#");

但是为了追求一个完美的脚本,并允许它在任何可能的页面的每一个可能性中工作(并且衬里的不确定性足够有效),我想我会在stackOverflow咨询专家

总而言之,我的问题是,“这可以(并且已经完成)在一个班轮中完成,是否有任何可能错过的东西?”。请尽可能打破这一点。

3 个答案:

答案 0 :(得分:3)

没有。此操作中的任何内容都不会停止meta重定向,或者已经在飞行中的超时或间隔,并且它不会对可以到达的相同来源iframe(或可以通过document.domain成为相同来源的那些)做任何事情回到父页面以重新动态化内容。

编辑: 脚本可以保留在以后弹出的大量方法很大,所以除非你在你想要这样做之前控制所有可以运行的代码,否则我倾向于说实际上不可能将它锁定,除非你有一个团队,包括一些浏览器实现者在这方面工作了一段时间。

潜艇脚本的其他可能来源:XMLHttpRequest s(和他们的onreadystatechange处理程序),canscript,网络工作者和嵌入代码的flash对象,如{{1} }}

答案 1 :(得分:0)

首先:您的代码将从页面中删除所有内容,并留下空白页面。我看不出它会如何使页面“静止”。

$('*').detach();

将从DOM中删除每个元素。精光。所以,是的,您以某种方式删除了所有功能,但您也删除了所有内容。

更新:即使从detach更改为unbind,以下几点仍然有效。

  • 通过oneventname="foo()"添加到标记中的事件侦听器不会受到影响。
  • javascript:个网址,例如图像中的图像可能仍会被触发。
  • 添加到windowdocument的事件监听器将保留。

查看DEMO

答案 2 :(得分:0)

我不想写一篇冗长的评论,所以我发帖了。

正如@Felix Kling所说,我不认为你的代码会删除每个元素上的href属性,而是删除每个元素,然后选择它们的href属性。

你可能需要写:

$("*").attr("href", "#").detach() ;

删除属性而不是元素。

除此之外,我怀疑你可以在一行中删除事件处理程序。首先,您需要考虑DOM级别2事件注册(仅可通过脚本设置)和DOM级别1事件注册(通过属性或脚本)。

就我而言,最好的办法是使用XML解析器制作浅文档副本并替换旧文档(可以备份 - 保存到窗口中)。