Javascript 使用jQuery禁用页面上的所有内容。破译我的密码

Javascript 使用jQuery禁用页面上的所有内容。破译我的密码,javascript,jquery,html,testing,dom,Javascript,Jquery,Html,Testing,Dom,对于我当前的项目,我要求该工具能够从一个页面中删除所有功能,以便它是完整的静态页面。删除跟踪任何链接的功能,禁用和javascript侦听器,允许更改页面上的内容。以下是我迄今为止的尝试: $("*").unbind().attr("href", "#"); 但是为了追求一个完美的脚本,为了让它在任何可能的页面上都能正常工作(并且在线运行的不确定性足够有效),我想我应该咨询stackOverflow的专家 总而言之,我的问题是,‘这可以(而且已经)在一行中完成吗?这会错过什么吗?’。请尽可能打

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

$("*").unbind().attr("href", "#");
但是为了追求一个完美的脚本,为了让它在任何可能的页面上都能正常工作(并且在线运行的不确定性足够有效),我想我应该咨询stackOverflow的专家


总而言之,我的问题是,‘这可以(而且已经)在一行中完成吗?这会错过什么吗?’。请尽可能打破此限制。

否。此限制中的任何内容都不会停止
meta
重定向、超时或已在飞行中的间隔,也不会对同一来源
iframe
s(或可通过
document.domain
变为同一来源的内容)执行任何操作,这些内容可以返回到父页面进行重新编码

编辑: 脚本可以隐藏在水下以在以后弹出的方式非常多,因此,除非您在想要执行此操作之前控制所有可以运行的代码,否则我倾向于说,在实践中不可能锁定它,除非您有一个团队,包括一些浏览器实现人员,在这方面工作一段时间


潜艇脚本的其他可能来源:
XMLHttpRequest
s(及其
onreadystatechange
处理程序)、能够
canscript
的flash对象、web工作人员,以及嵌入代码以在
Object.prototype.toString
中运行。首先:您的代码将从页面中删除所有内容,留下一页空白。我看不出它如何使页面“静态”

将从DOM中删除每个元素。什么都没留下。因此,是的,您以某种方式删除了所有功能,但也删除了所有内容。

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

  • 通过
    oneventname=“foo()”
    添加到标记中的事件侦听器不会受到影响
  • javascript:
    URL(例如图像中的URL)仍可能被触发
  • 添加到
    窗口
    文档
    的事件侦听器将持续存在

请参阅。

我不想写冗长的评论,因此我将此内容发布

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

你可能需要写:

$("*").attr("href", "#").detach() ;
删除属性而不是元素

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


就我而言,最好的办法是使用XML解析器创建一个浅层文档副本,并替换旧文档(可以将其备份保存到窗口)。

似乎是一个不错的代码检查问题。。。您的代码将删除页面中的所有内容,留下一个空白页面。我看不出它如何使页面“静态”。这将更容易:
document.body.innerHTML=“”;)假设它在某种程度上对您有效,那么通过
oneventname=“foo()”
添加到标记中的所有事件侦听器都不会受到影响。这不会有什么区别
attr(“href”,“#”)
将以
$(“*”)
的形式返回返回的对象。您可以随时重新安排方法调用。。。
$("*").attr("href", "#").detach() ;