如何在404页面处理权限被拒绝的异常?

时间:2013-06-27 10:51:02

标签: javascript firebug http-status-code-404 greasemonkey permission-denied

我正在尝试编写一个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页面上不能自行运行的问题。

我已经搜索了答案,但找不到任何有用的问题。

感谢您的帮助

1 个答案:

答案 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'));
});