2013-06-24 43 views
3

我設置此權限chrome.tabs不適:您沒有權限訪問此API

"permissions": [ "tabs" ], 

,並在.js文件我用

chrome.tabs.getSelected(null, function(tab) { 
var page_url = tab.url; 
$("#chrome_ext_qr_code img").attr("src", ...); 
$("#chrome_ext_qr_code input").val(...); 
}); 

爲什麼我得到這個錯誤?

chrome.tabs不可用:您無權訪問此API。確保所需的權限或清單屬性包含在您的manifest.json中。

+4

的'tabs' API僅適用於擴展流程,而不是內容的腳本。 –

回答

0

正如Rob W已經提到的那樣,您無法訪問內容腳本中的選項卡API。

您必須向背景腳本發送請求,該腳本返回選定的選項卡。

(內容 - 的script.js)

chrome.extension.sendRequest({ command: "selected-tab" }, function(tab) { 
    var page_url = tab.url; 
    // your code 
}); 

background.js

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) { 
    if (request.command == "selected-tab") { 
     chrome.tabs.getSelected(null, sendResponse); 
    } 
}); 
1

斯蒂芬溶液,如所描述的,不再工作。 AFAICT,它看起來像谷歌不再允許content-script中描述的回調訪問標籤API。

所有這一切都意味着,你必須在你的background.js指定您的重定向代替:

(內容的script.js)

chrome.extension.sendRequest({ command: "selected-tab" }); 

(background.js)

chrome.extension.onRequest.addListener(function(request, sender) { 
    if (request.command == "selected-tab") { 
    chrome.tabs.getSelected(null, function(){ 
     // your code here 
     // var page_url = tab.url etc, etc 
    }; 
    } 
}); 
+0

如果頁面加載速度緩慢,並且在執行內容腳本之前切換選項卡,該怎麼辦?我相信你會得到當前選定的選項卡,而不是內容腳本運行的選項卡。 –

0

Google不允許(不再?)從內容腳本中訪問標籤對象。

如果你想你可以從發送到回調監聽的功能,發送者這樣做的標籤:

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) { 
    console.log("Received from tab: ", sender.tab); 
}); 
相關問題