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

相關問題