2

我想構建自己的Chrome擴展,並且試圖使用onBeforeRequest添加事件處理程序。chrome.webRequest.onBeforeRequest.addListener無法讀取未定義的屬性'onBeforeRequest'

manifest.json

{ 
    "manifest_version": 2, 

    "name": "My extension", 
    "description": "some descrpition", 
    "version": "1.0", 
    "permissions": [ 
     "activeTab", 
     "tabs", 
     "webRequest", 
     "webNavigation", 
     "management", 
     "http://*/*", 
     "https://*/*" 
    ], 
    "background": { 
     "scripts": [ 
      "js/jquery-2.1.4.min.js", 
      "js/background.js" 
     ], 
     "persistent": true 
    }, 
    "browser_action": { 
     "default_icon": "imgs/img.png", 
     "default_title": "extension" 
    }, 
    "icons" : { 
     "64" : "imgs/vergrootglas.png" 
    } 
} 

background.js

function callback(param1,param2,param3){ 
    alert(param1); 
    alert(param2); 
    alert(param3); 
} 
//alert("test"); 



chrome.webRequest.onBeforeRequest.addListener(callback); 

我得到這個裝入我的鉻。但每次我在我的控制檯得到這個消息:

Uncaught TypeError: Cannot read property 'onBeforeRequest' of undefined

我想不出什麼我oding錯了,我發現這一點: https://developer.chrome.com/extensions/webRequest

但代碼的例子似乎與我所做的完全一樣。 我在這裏錯過了什麼?

+0

您無法在內容腳本中執行此操作AFAIK –

+2

[CHROME WebRequest API示例錯誤的可能重複:「onBeforeRequest」只能用於擴展進程中](http://stackoverflow.com/questions/8223233/chrome -webrequest-apis-example-error-onbeforerequest-can-only-in-in-exte) –

+0

那麼,我該怎麼做呢? – SheperdOfFire

回答

0

的上述評論沒有道理給我。上面還有一個後臺腳本,它似乎有相應的權限...一些額外的意見,可以幫助...

您需要在清單文件中添加一個後臺頁面,在清單這樣的背景相應的權限頁面可以訪問webRequest API。看到這個例子:chrome.webRequest not working?

至於米哈伊提到的,如果你需要有內容腳本執行的操作,看看這個頁面了:https://developer.chrome.com/extensions/messaging

添加到您的內容腳本(你可以改變問候動作和問好到行動的背景腳本應執行):

chrome.runtime.sendMessage({greeting: "hello"}, function(response) { 
    console.log(response.farewell); 
}); 

添加到您的背景頁面(你可以做if語句,並根據[執行該消息)不同的操作:

chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) { 
    console.log(sender.tab ? 
       "from a content script:" + sender.tab.url : 
       "from the extension"); 
    if (request.greeting == "hello") 
     sendResponse({farewell: "goodbye"}); 
    }); 
相關問題