我正在尝试编写一个greasemonkey脚本,如果页面显示404错误,则会检查firefox。如果是,则脚本应重新加载页面。 schript看起来像这样:
// ==UserScript==
// @name 404-reloader
// @namespace None
// @include *
// @version 1
// ==/UserScript==
url = "http://www.example.com";
if (document.getElementById("errorPageContainer"))
location.href = url;
我的问题是,它有时只能起作用。为了测试它我关闭了我的无线适配器并加载了一个页面。脚本本身不是,所以我手动启动它。我第一次启动它时脚本工作并更改为example.com,在那里我得到了另一个未找到错误,因为适配器仍然关闭。我再次启动脚本并且它有效。第三次我在剧本中得到一个例外:
/*
Exception: Permission denied to access property 'document'
@Scratchpad/2:10
*/
我发现当我更改URL时,脚本会运行一次。之后我得到了这个例外。 当脚本不起作用时,我将其复制到firebug控制台并运行它。它在那里工作但仍然没有在greasemonkey脚本中。
现在我想知道为什么greasemonkey的行为与此类似,以及我如何处理Exception的问题以及Greasemonkey在404页面上不能自行运行的问题。
我已经搜索了答案,但找不到任何有用的问题。
感谢您的帮助
答案 0 :(得分:1)
我认为这是一个功能,实际上GM不会在错误页面上运行,无论如何,这对我有用:
而不是默认运行document-end
,而是在document-start
运行并为DOMContentLoaded
添加一个监听器时,即使重新加载,它也适用于我。请注意@run-at
是特定于GM的(> = 1.0),据我所知,到目前为止Chrome / Opera并不便携。
// ==UserScript==
// @name test123
// @namespace test123
// @version 1
// @include *
// @grant none
// @run-at document-start
// ==/UserScript==
document.addEventListener("DOMContentLoaded", function () {
console.log(document.getElementById('errorPageContainer'));
});