2

我想写一个在Firefox中检查页面是否显示404错误的greasemonkey脚本。如果是这样,脚本应该重新加载页面。看起来像这样:如何在404页面处理被拒绝的权限异常?

// ==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时,脚本工作一次。之后我得到这个例外。 当脚本无法使用时,我将它复制到萤火虫控制台并运行。它在那里工作,但仍然没有在greasemonkey脚本中。

现在我想知道为什么greasemonkey的行为像这样以及我如何处理异常问题以及Greasemonkey本身不能在404页面上运行的问题。

我已经搜索了答案,但没有找到对我的问题有用的东西。

谢谢您的帮助

回答

1

我认为这是一个功能实际上,通用汽车不会在错误网页上运行,无论如何,这对我的作品:

,而不是运行在document-end这是默认的,你运行在document-start并为DOMContentLoaded添加一个监听器,即使在重新加载时,它也适用于我。请注意,尽管@run-at是通用汽车专用的(> = 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')); 
}); 
+0

我试图将其包含到我的脚本中,然后复制它到底如何写它,但它不工作:(它仍然不会在开始运行,我仍然获得权限被拒绝的错误。还检查了我的greasemonkey版本:1.9 – user2527199

+0

那么我已经在原始文章(特别是'@ include')中删减了一些元数据,现在它工作吗?Firefox 22,GM 1.9 –

+0

不,我仍然得到相同的错误。我在FF2上运行了一个脚本,但是它没有工作,在Firefox或GM中有什么设置需要改变吗?它是否在浏览器中运行?我有FF21, GM1.9。这可能是FF21中的一个错误吗? – user2527199

相关问题