簡體   English   中英

chrome.tabs.create不起作用

[英]chrome.tabs.create not working

由於我的內容腳本無法使用所有chrome API工具,因此我正在從內容腳本向后台腳本發送一條消息。 收到背景腳本后,應該打開一個新選項卡,其中包含我創建的html文件。

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

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內部一定發生了chrome.tabs.create 為什么會破裂?

permission.html路徑是相對於后台腳本的。

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

我不確定這是否有影響,但是內容腳本和后台腳本是異步通信的,因此要使用sendResponse回調,您需要return true; 在onMessage匿名函數的末尾。

Chrome onMessage返回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
});

同樣,我不確定這是否可以解決您的問題,但是無論如何,如果沒有在偵聽器末尾返回true,則使用sendResponse的響應將無法工作

此外,順便說一句, chome.extension.getURL()不需要點斜杠,因此chrome.extension.getURL('src/permission.html')應該足夠。

你試過跑步嗎

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

(帶或不帶點斜線)以查看標簽頁是否打開?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM