通过JS完全清除页面而不重定向到about:blank?

时间:2013-02-03 18:40:20

标签: javascript html dom greasemonkey userscripts

对于用户脚本,我需要清除包含其所有样式,内容,事件和计时器的页面。是否可以在不重定向到about:blank的情况下执行此操作?

我试过了document.body.remove(); document.head.remove();,但计时器并没有停用。

如何正确清除HTML页面?

3 个答案:

答案 0 :(得分:1)

删除计时器,你可以请求一个空的setTimeout,然后尝试减少它的id并为每个id调用clearTimeout。你可以对setInterval做同样的事。

*编辑:正如bikeshedder所说, 在MDN中未定义timeoutID的类型。它可以是从随机数到UUID的任何内容。 MSDN将其定义为Integer,但并未说ID需要随着时间的推移而变大。很可能重用已停止的超时/间隔的ID。依赖于此是不可移植的,将来可能会破坏。

但与此同时,上述方式只有你可以清除所有计时器的方式。至少它仍然适用于AFAIK。

就个人而言,我个人建议保留所有setTimeout和setInterval的ID。

答案 1 :(得分:1)

绝对确定只需将浏览器重定向到其他网址:

window.location = "empty.html";

我宁愿不使用about:blank,因为它可能并非在所有浏览器中都可用,并且由于Same-Origin-Policy而失去了对iframe或窗口内容的控制权。此外,about:blank可能并非在所有浏览器中都可用。


无需将浏览器重定向到其他页面,唯一可靠的方法是使用显式跟踪。您的代码需要使用特殊函数来启动/停止计时器,注册事件等。这很乏味,我认为它不太实用,因为您需要破解您正在使用的所有库。

Monkeypatching window的内置函数也是一个很大的问题,因为有些浏览器可能不允许这样做。

答案 2 :(得分:0)

您可以重定向到"data:text/html,"。这允许您指定要在URL中呈现的HTML文档。

IE9是第一个支持iframe和windows数据URL的Internet Explorer版本 参考:维基百科上的Data URI scheme#Web browser support