【问题标题】:Chrome proxy api - Uncaught TypeError: Invalid invocationChrome 代理 api - 未捕获的类型错误:无效调用
【发布时间】:2020-08-26 05:16:06
【问题描述】:

我想使用 chrome 代理 API。我的后台脚本中有这段代码,但它不起作用

const proxyData = []

const fetchProxyData = () => {
  axios({
    method: "GET",
    baseURL: "https://api.getproxylist.com/proxy",
    params: {
      protocol: "http",
      allowsPost: 1,
      allowsHttps: 1,
      anonimity: "high anonymity"
    }
  }).then( (response) => {
    console.log(response.data)
    proxyData.push(response.data)
  })
}

fetchProxyData();

var config = {
  mode: "fixed_servers",
  rules: {
    singleProxy: {
      host: proxyData.ip,
      port: proxyData.port
    }
  }
}

chrome.proxy.settings.set({
   value: config,
   scope: "regular"
 }, () => {
   console.log(`proxy configured with data: ${proxyData}`)
})

我在后台页面控制台中收到此错误:background.js:55 Uncaught TypeError: Invalid invocation

我已经尝试使用代理 api 文档提供的示例,并且不会发生错误。也许它是由配置对象引起的?如您在代码中看到的那样设置代理,我使用的是ajax调用,也许这是问题所在?

有什么解决办法吗?

【问题讨论】:

  • 哪一行是“55”?
  • 这是chrome.proxy.settings.set({}) 函数。
  • 错字:anonimity 应该是anonymity
  • @nukiko12 你有解决这个错误的办法吗?
  • 嗨,我遇到了同样的事情,在chrome.proxy API的文档页面上找到,现在是only works in Chrome OS...我一开始没有买,因为我看到了很多代理扩展在商店中仍然可用,但后来我在其中一个扩展中看到了 a change from v53,不确定它是否只影响 PAC 脚本或所有代理 API

标签: javascript google-chrome-extension proxy


【解决方案1】:

当我找到解决方案时,我也遇到了同样的问题,这是一个愚蠢的错误。

我已将字符串值传递给port

请确保您将整数值传递给port

【讨论】:

    【解决方案2】:

    关闭。几件事。

    第一,您需要在调用 Chrome 的代理 API 之前获取您的数据。第二,您从 proxyData 数组中获取配置的属性,而不是从您的 axios 调用中获取 JSON 对象。

    你需要做这样的事情:

    const proxyData = [];
    const fetchProxyData = () => {
        axios({
            method: "GET",
            baseURL: "https://api.getproxylist.com/proxy",
            params: {
                protocol: "http",
                allowsPost: 1,
                allowsHttps: 1,
                anonimity: "high anonymity"
            }
        }).then((response) => {
            const {data} = response;
    
            proxyData.push(data);
    
            const config = {
                mode: "fixed_servers",
                rules: {
                    singleProxy: {
                        host: data.ip,
                        port: data.port
                    }
                }
            };
    
            chrome.proxy.settings.set({
                value: config,
                scope: "regular"
            }, () => {
                console.log(`proxy configured with data: ${data}`)
            });
        })
    };
    
    fetchProxyData();
    

    您的代码发生了什么...singleProxyconfig)中的属性hostport 被分配undefined,因为这些属性在数组proxyData 中不存在。它们存在于您的 axios 调用返回的对象中(上图,data)。

    undefined 键导致 Chrome 抛出 Invalid Invocation 错误。

    对于其他遇到 Invalid Invocation 问题的人,在我看来问题通常在于您传递给 Chrome 的配置。特别是每个键的类型。

    在我的例子中,当它需要是一个数字时,我将端口作为字符串传递。

    【讨论】:

      猜你喜欢
      • 2017-09-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-17
      • 2012-10-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多