2016-05-17 50 views
2

我试图从选项页面更新chrome扩展清单文件中的权限。 基本上,用户应该能够输入要在其上运行的扩展的url,并且该URL将在扩展清单文件中更新。 我目前使用chrome.storage.sync存储我的所有选项以用于多个文件。 我正在寻找一个安全的解决方案,只给出所选的URL访问。有什么建议么?从选项页面更新chrome扩展清单权限

+0

您想要更改权限或更改内容脚本吗?如果是后者,你对'run_at'有特殊的限制吗? – Xan

+0

我最终需要做两件事,但我一次试图解决一个问题,并希望一个会导致另一个问题。我不相信我目前对'run_at'有任何限制。 – OshGoshJosh

+0

你还需要'externally_connectable'吗?一般来说,请说明你的分机应该做什么。 – Xan

回答

1

这是不可能的(更新清单)。

但是,你能解释一下具体的使用情况是:

  1. 有“允许”的网站列表。
  2. 当按下按钮调用扩展时,如果网站被允许 - 注入一个内容脚本来执行某些操作。

在这种情况下"activeTab" permissionProgrammatic Injection应该可以解决您的问题。

  • 您不在清单中声明任何内容脚本。这确保代码只在需要时运行。
  • 您不声明清单中的任何主机权限。您的分机只能在浏览器操作按下时的当前选项卡上工作。
  • 您向用户询问允许的URL并将其存储在chrome.storage中。
  • 使用浏览器操作调用您的扩展时,您可以查询当前活动的选项卡并获取其URL(因为"activeTab"权限)。
    • 然后,您的逻辑将其与存储的列入白名单的网址进行比较。
    • 如果匹配 - 您使用chrome.tabs.executeScript注入您的内容脚本。
    • 如果没有匹配 - 什么都不做,或者以某种方式要求用户确认将新域名列入白名单。

下面是一些示例代码:

chrome.tabs.query({active: true, currentWindow: true}, function(tabs) { 
    var currentTab = tabs[0]; 
    // Pseudocode 
    if (whitelisted(currentTab.url)) { 
    chrome.tabs.executeScript(currentTab.id, {file: "content.js"}); 
    } else { 
    // Do nothing or show some warning 
    } 
}); 

或者,你可以看看Optional Permissions API