【问题标题】:Communicating with content scripts without requesting "tabs" permission在不请求“标签”权限的情况下与内容脚本通信
【发布时间】:2011-07-25 13:49:24
【问题描述】:

在开发 Chrome 扩展程序时,我的后台脚本需要与加载特定站点的选项卡中的内容脚本进行通信。 有没有不使用 chrome.tabs.sendRequest 的方式进行通信?

此功能需要“标签”权限,显示为“此扩展程序可以访问您的浏览历史记录”,这会吓跑用户。

【问题讨论】:

  • @serg 是对的,如果您的通信不复杂,则不需要tabs 权限。你在传达什么样的信息?

标签: google-chrome google-chrome-extension privacy userscripts


【解决方案1】:

对不起,没有其他办法了。

更新

其实是有办法的。您可以从内容脚本中提取数据,而不是将数据从后台页面推送到内容脚本,这不需要任何权限:

内容脚本:

chrome.extension.sendRequest({cmd: "getData"}, function(response) {
    console.log("data:", response);
});

背景页面:

chrome.extension.onRequest.addListener(function(request, sender, sendResponse) {
    if(request.cmd == "getData") {
        sendResponse({param1: "value1", param2: "value2"});
    }
});

【讨论】:

  • 他在问:“有没有办法不使用使用 chrome.tabs.sendRequest 进行通信?”
  • @Derek 所以你在我的回答中看到了chrome.tabs.sendRequest?另外,与这种特定方法相比,他更关心在不提高标签权限警告的情况下进行通信。至于您的答案-如果您通过清单进行注入内容脚本,则不需要标签权限。
  • 注入内容脚本将显示与tabs权限相同的警告。
  • @Derek 它将显示与http://*/* 域权限相同的警告,而不是tabs。但这不是重点——你说注入内容脚本需要tabs 权限,我说只有在清单中未声明内容脚本时才如此。
  • 这是一个合理的解决方案,但它需要轮询,而我希望让后台页面触发通信。
【解决方案2】:

请记住,即使您可以在不使用chrome.tabs.sendRequest 的情况下与后台页面通信(实际上它几乎是impossible),您仍然需要tabs 权限才能注入内容脚本。

阅读更多:http://code.google.com/chrome/extensions/content_scripts.html

【讨论】:

  • 注入脚本有两种方式:一种是在manifest中声明,不需要“tabs”;另一个以编程方式确实需要“标签”。无论如何,谢谢你提醒我;无论如何,我确实在某一时刻以编程方式注入;所以我现在有两个理由使用“标签”。
猜你喜欢
  • 1970-01-01
  • 2013-05-03
  • 1970-01-01
  • 2023-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-09-06
相关资源
最近更新 更多