对于用户脚本,我需要清除包含其所有样式,内容,事件和计时器的页面。是否可以在不重定向到about:blank
的情况下执行此操作?
我试过了document.body.remove(); document.head.remove();
,但计时器并没有停用。
如何正确清除HTML页面?
答案 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。