扩展名中缺少chrome.proxy,且声明了代理权限

h79rfbju  于 2023-06-19  发布在  Go
关注(0)|答案(2)|浏览(133)

我正在开发一个使用proxy api的Chrome扩展程序。在我的清单中,我声明了示例中的权限:

{
  "manifest_version": 2,
  "version": "0.1",
  "name": "My extension",
  "content_scripts": [{
    "matches": ["localhost"],
    "js": ["content.js"],
    "run_at": "document_start"
  }],
  "permissions": [
    "proxy"
  ]
}

这实际上在4月中旬起作用了,但是现在加载它(在我的浏览器和同事的浏览器中),chrome代理API是永远不可用的(即使切换到chrome开发控制台的extension/content.js上下文)-chrome.proxy只是未定义的。
文档没有提到它,但是chrome.proxy API被弃用了吗?

xyhw6mcr

xyhw6mcr1#

基于What's New in Extensions,从Google Chrome 13开始,chrome.proxy API依赖于ChromeSetting类型API原型获取和设置代理配置。
在Chrome设置文档中,它指出:
ChromeSetting prototype提供了一组通用的函数(get()set()clear())以及一个用于Chrome浏览器设置的事件发布器(onChange)。
Chrome区分浏览器设置的三种不同范围,并按优先级递增的顺序管理可能影响有效设置的不同层上的设置。
1.操作系统提供的系统设置
1.命令行参数
1.扩展提供的设置
1.政策
如列表所示,策略可能会否决您对扩展指定的任何更改。您可以使用get()函数来确定您的扩展是否能够提供设置,或者是否会覆盖此设置。
请尝试浏览文档以了解有关代理配置更改的更多详细信息。

zdwk9cvp

zdwk9cvp2#

找到答案了。您需要在popup.js中运行这些代码(基本上是在刷新时没有重新加载的代码,而是驻留在扩展中的代码)
完美的工作为我与下面的代码。

function setProxy(proxyIP) {
  var config = {
    mode: "fixed_servers",
    rules: {
        singleProxy: {
            scheme: "http",
            host: proxyIP,
            port:8888
        }
    }
  };
  chrome.proxy.settings.set(
    {value: config, scope: 'regular'},
    function() {});
  chrome.proxy.settings.get(
    {'incognito': false},
    function(config) {
      console.log(JSON.stringify(config));
    }
  );
}

$( document ).ready(function() {
  setProxy(proxyIP)
}

希望你能找到答案。

相关问题