2016-12-05 165 views
0

因爲我的內容腳本無法使用所有的chrome API工具,所以我正在從我的內容腳本向我的後臺腳本發送消息。收到後,後臺腳本應該打開一個包含我製作的html文件的新選項卡。chrome.tabs.create不起作用

這是從內容腳本發送消息...

chrome.runtime.sendMessage({permission: true}, function(response) { 
     console.log(response.access); 
}); 

這是我的後臺腳本接收消息的代碼...

chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) { 
    if (request.permission == true) { 
     chrome.tabs.create({'url': chrome.extension.getURL('./src/permission.html')}, function(tab) { 
      sendResponse({access: "yes"}); 
     }); 
    } 
}); 

收到該消息,我已經測試過了。但是,當我添加以下代碼...

chrome.tabs.create({'url': chrome.extension.getURL('./src/permission.html')}, function(tab) { 
...etc 

我收到一個錯誤,說沒有收到響應。意思是我的chrome.tabs.create裏面必須有東西。爲什麼它破裂?

permission.html路徑相對於後臺腳本。

我想要的是在收到消息時創建一個新選項卡。

回答

1

我不確定這是否會產生任何影響,但內容腳本和後臺腳本異步通信,因此您需要使用sendResponse回調函數,您需要在onMessage匿名函數結束時使用return true;

Chrome onMessage return true

chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) { 
    if (request.permission == true) { 
     chrome.tabs.create({'url': chrome.extension.getURL('./src/permission.html')}, function(tab) { 
      sendResponse({access: "yes"}); 
     }); 
    } 
    return true; //to tell the content script to look out for sendResponse 
}); 

同樣,我不知道這是否會解決您的問題,但無論如何,使用sendResponse你的反應會沒有在聽者的結束返回true工作

另外,BTW,chome.extension.getURL()不需要點斜線,所以chrome.extension.getURL('src/permission.html')應該足夠。

您是否嘗試過只是運行

chrome.tabs.create({'url': chrome.extension.getURL('src/permission.html')}); 

(有或沒有點斜槓),看看標籤中打開?

+0

不幸的是這些解決方案都沒有幫助。該選項卡仍然不會打開 – Bolboa

+0

您可以嘗試運行該命令嗎?轉到chrome:// extensions,然後(確保選中「開發者模式」)點擊你的擴展的「背景頁面」。一旦開發工具打開,進入控制檯標籤,試着直接通過執行'chrome.tabs.create({'url':chrome.extension.getURL('src/permission.html')}); –