对于我当前的项目,我要求工具能够从页面中删除所有功能,以便它是完整的文字静态页面。删除跟踪任何链接的功能,禁用和javascript侦听器允许在页面上更改内容。这是我到目前为止的尝试:
$("*").unbind().attr("href", "#");
但是为了追求一个完美的脚本,并允许它在任何可能的页面的每一个可能性中工作(并且衬里的不确定性足够有效),我想我会在stackOverflow咨询专家
总而言之,我的问题是,“这可以(并且已经完成)在一个班轮中完成,是否有任何可能错过的东西?”。请尽可能打破这一点。
答案 0 :(得分:3)
没有。此操作中的任何内容都不会停止meta
重定向,或者已经在飞行中的超时或间隔,并且它不会对可以到达的相同来源iframe
(或可以通过document.domain
成为相同来源的那些)做任何事情回到父页面以重新动态化内容。
编辑: 脚本可以保留在以后弹出的大量方法很大,所以除非你在你想要这样做之前控制所有可以运行的代码,否则我倾向于说实际上不可能将它锁定,除非你有一个团队,包括一些浏览器实现者在这方面工作了一段时间。
潜艇脚本的其他可能来源:XMLHttpRequest
s(和他们的onreadystatechange
处理程序),canscript
,网络工作者和嵌入代码的flash对象,如{{1} }}
答案 1 :(得分:0)
首先:您的代码将从页面中删除所有内容,并留下空白页面。我看不出它会如何使页面“静止”。
$('*').detach();
将从DOM中删除每个元素。精光。所以,是的,您以某种方式删除了所有功能,但您也删除了所有内容。
更新:即使从detach
更改为unbind
,以下几点仍然有效。
oneventname="foo()"
添加到标记中的事件侦听器不会受到影响。javascript:
个网址,例如图像中的图像可能仍会被触发。window
和document
的事件监听器将保留。查看DEMO。
答案 2 :(得分:0)
我不想写一篇冗长的评论,所以我发帖了。
正如@Felix Kling所说,我不认为你的代码会删除每个元素上的href属性,而是删除每个元素,然后选择它们的href属性。
你可能需要写:
$("*").attr("href", "#").detach() ;
删除属性而不是元素。
除此之外,我怀疑你可以在一行中删除事件处理程序。首先,您需要考虑DOM级别2事件注册(仅可通过脚本设置)和DOM级别1事件注册(通过属性或脚本)。
就我而言,最好的办法是使用XML解析器制作浅文档副本并替换旧文档(可以备份 - 保存到窗口中)。