繁体   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