Chrome扩展程序中tabs.create之后的tabs.executeScript

时间:2018-10-23 11:54:56

标签: javascript google-chrome-extension

我正在创建一个简单的Chrome扩展程序,其中包含要以编程方式插入的弹出窗口,后台脚本和内容脚本。

当用户单击按钮时,我希望扩展程序使用用户提供的url创建一个新选项卡,并在该页面上执行内容脚本。

我的方法是将消息从弹出窗口发送到我的后台脚本,然后运行以下代码:

chrome.tabs.create({ url }, () => {
  chrome.tabs.executeScript({ file: 'content.js' });
});

但这失败了,并告诉我我的扩展名没有正确的权限,即使我将权限设置为["activeTab"]

问题是我希望没有权限在每个url上执行,例如["https://*/*", "http://*/*"](可能看起来可疑,但可能是我唯一的解决方案)。

我在此处设置了示例存储库:https://github.com/adambrgmn/test-extension。可以将其作为扩展程序加载到Chrome中。

还有其他人遇到此问题吗?有任何解决方法吗?

1 个答案:

答案 0 :(得分:0)

activeTab仅当用户从选项卡激活您的扩展程序而不是从该选项卡创建的任何新选项卡时,才授予您对当前选项卡的权限。

打开标签之前,您可能必须请求对该URL的许可,例如:

// in your popup.js
// Listen to your "create tab" button
document.querySelector('button').addEventListener('click', () => {
    // Get the URL they entered
    const urlEntered = document.querySelector('input').value;

    // Request the permission
    chrome.permissions.request({origins: [urlEntered]}, granted => {
        if (granted) {
            // Create the tab only if it was granted
            chrome.tabs.create({ url }, tab => {
                chrome.tabs.executeScript(tab.id, { file: 'content.js' });
            });
        } else {
            alert('You need to grant permission')
        }
    });
});