javascript - chrome.tabs.create 不起作用

标签 javascript google-chrome google-chrome-app

由于我的内容脚本无法使用所有 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 路径是相对于后台脚本的。

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

最佳答案

我不确定这是否有任何影响,但内容脚本和后台脚本异步通信,因此要使用 sendResponse 回调,您需要返回 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')});

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

关于javascript - chrome.tabs.create 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40967733/

相关文章:

javascript - 使用 JavaScript 在 HTML 中创建样式文本节点的 SVG 轮廓路径

javascript - 需要多次使用 getElementById 来更改图像 src

javascript - Moski Gist-Blogger 未在 Chrome 中加载 Gists(适用于 Blogger 动态 View 中的 Gists)

javascript - 拒绝在 chrome 中获取不安全的 header "Location",在 firefox 中没有内容

javascript - 在 Google Chrome 中调试

google-chrome-app - 无需用户交互即可获取用户 OpenID URL

javascript - Q Promise onError 从未被调用

javascript - Three.JS 全景图在移动设备上无法正确调整大小

google-chrome - 使 Chrome 应用程序以特殊窗口边框运行

google-chrome - 在一个设置中安装 native 应用程序及其相关的 chrome 扩展