代码之家  ›  专栏  ›  技术社区  ›  buydadip

chrome.tabs。创建不工作

  •  0
  • buydadip  · 技术社区  · 8 年前

    因为我的内容脚本无法使用所有的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 .为什么它坏了?

    这个 permission.html

    我想要的是在收到消息时创建一个新选项卡。

    1 回复  |  直到 8 年前
        1
  •  1
  •   Joseph Shih    8 年前

    我不确定这是否有任何影响,但内容脚本和后台脚本异步通信,因此您可以使用 sendResponse 回拨,您需要 return true; 在onMessage匿名函数的末尾。

    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
    });
    

    同样,我不确定这是否会解决您的问题,但无论如何,如果在侦听器的结尾不返回true,使用sendResponse的响应将无法工作

    此外, chome.extension.getURL() 不需要点斜线,所以 chrome.extension.getURL('src/permission.html') 应该够了。

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

    (带或不带点斜杠)查看选项卡是否打开?