4

我正在開發具有內容腳本,背景頁面,設置頁面和彈出頁面的Google Chrome擴展程序。我瞭解到儘管內容腳本在Chrome網上應用店加載,但從未調用onMessage偵聽器。我的google-chrome擴展程序中是否有chrome。* API,以查找禁止腳本訪問的頁面?

我可以在哪裏,我執行chrome.extension.onMessage.addListener點持續突破,但聽者則永遠不會調用。因此,當我從背景或彈出頁面執行chrome.tabs.sendMessage時,將不會調用responseCallback函數 - 即不會執行responseCallback內部的邏輯。 Chrome甚至不會將此視爲錯誤情況 - 它會接受請求,但會在此後保持沉默。

如果它處理爲錯誤的情況下(如試圖消息chrome://頁),則responseCallback就已經調用了未定義的響應參數 - 這會導致我的錯誤處理代碼來執行..但沒有這樣的運氣。

我可以在我的代碼添加特殊行爲http(s)://chrome.google.com/webstore/*,但希望有發現從執行被禁止的網頁更正式的方式。希望在那裏有任何指針。

我發現了一個偉大的職位here,但它不具有可編程的API,因此這個問題。

我已經意識到,Chrome網上應用店和chrome://網址是特殊情況。但是,根據我的調查,chrome://網址上的行爲與Chrome網上應用店中的行爲不同。在chrome://網址,我的內容腳本出現在所有不加載和sendMessageresponseCallback功能被用空/未定義的響應對象調用。這是API發出錯誤信號的正式方式,對我來說工作正常。

我的問題是能夠以編程方式檢測像Chrome網上應用店所遇到的錯誤,而無需對URL進行硬編碼(URL可能隨時間而改變)。

在此先感謝您的回覆。

回答

2

如何在後臺腳本中添加對chrome.webNavigation.onCompleted監聽器?加載新頁面時,向該選項卡發送一個特殊的「ping」消息,並使用chrome.extension.onMessage接收並響應您的內容腳本中的ping。如果內容腳本沒有響應,那麼您知道它不在該頁面上運行。

+0

喜馬修,謝謝您的閱讀,理解和迴應我的問題。是的,你的方法應該起作用。我目前的代碼採用了這種技術 - 即如果頁面沒有響應,那麼內容腳本就不存在了(或者出錯了)。即使通常情況下,即使另一部分代碼失敗仍然可以繼續工作。但是,如果有一種過濾出問題頁面的編程方式(例如所有的chrome:// URL),那麼我將能夠向最終用戶提供更好的工具提示/消息,解釋爲什麼UI缺少某些功能。再次感謝。 – user1801766

+0

你想如何更新UI?我不明白爲什麼ping頁面並不是一種「程序化的方式」來實現你想要的。 –

+0

對不起,我應該說'API'而不是'編程方式'。我期望的是一個chrome。* API,我可以使用URl(或tab-id)作爲參數來調用,它會告訴我該頁面是否允許內容腳本運行。在這種情況下,我甚至不會發出'ping',而是在UI上顯示一條消息,說明該頁面具有受限權限。我看了看,但發現沒有合適的Chrome。* API。我猜沒有任何。 – user1801766

0

您可以嘗試運行chrome.tabs.executeScript以查看您是否允許在該域中使用腳本。

chrome.tabs.executeScript(tabId, {code: ""}, function() { 
    if(chrome.runtime.lastError) { 
    // Something went wrong, perhaps no rights 
    } else { 
    // Scripting allowed 
    } 
}); 
相關問題