【问题标题】:How to check response of Pac script如何检查 Pac 脚本的响应
【发布时间】:2020-01-29 01:48:37
【问题描述】:

我需要在我的 chrome 扩展中获取 pacScript 的响应。如果我们不需要代理并且我想检测它,pacScript 将返回 DIRECT 字符串。

var config = {
        mode: "pac_script",
        pacScript: {
          url: "https://www.example.com/proxy.pac"
        }
      };

chrome.proxy.settings.set({value: config, scope: 'regular'},function() {
    //how can i get the pac response string here 
});

编辑: 我尝试使用 JQuery.getScript 从远程 pac 文件加载 FindProxyForURL,但现在像 isPlainHostName 这样的 pac 特定函数现在未定义。

我可以从mozilla 获得实现,但必须有更好的方法,因为这些是应该已经可用的浏览器功能。

【问题讨论】:

  • 由于是普通的javacript,可以运行,见Using eval in Chrome Extensions. Safely
  • @wOxxOm 你能举个例子吗,你认为这个解决方案是否适用于其他浏览器,如 firefox
  • 我没有任何例子。这些示例在我提供的链接中,希望您可以使用谷歌搜索找到更多。至于 Firefox,您可以在任何现代浏览器中使用具有正确指定 sandbox 属性的 iframe。

标签: javascript google-chrome-extension pac


【解决方案1】:

你想要做的事情根本不可能。这是因为您请求的每个 url 都会评估一个 pac 文件。因此,“pac 响应字符串”不是在设置代理设置时可以返回的常量。

如果您正在尝试调试您的 pac 文件,您可以在返回设置之前将 alert('settings') 放入 FindProxyForURL 中。警报会创建一个日志条目,可通过 chrome://net-internals/#events 功能访问该条目。

如果只想测试用户使用的是直连还是代理,可以对比设置代理设置前后的外网ip地址。结帐ipify.org 或者您甚至可以在您自己的网络服务器上使用脚本。

这里有一些示例代码:

let originalIp = "";

async function getCurrentIp() {
    var res = await fetch('http://api.ipify.org/');
    return await res.text();
}

// Get ip before setting proxy
getCurrentIp().then(ip => {
    originalIp = ip;
});

var config = {
    mode: "pac_script",
    pacScript: {
        url: "https://www.example.com/proxy.pac"
    }
};

chrome.proxy.settings.set({
    value: config,
    scope: 'regular'
}, function() {
    // Get ip after setting proxy and compare it with original ip
    getCurrentIp().then(ip => {
        if (ip == originalIp)
            console.log('DIRECT');
        else
            console.log('PROXY: ' + ip)
    })
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-09-10
    • 1970-01-01
    • 2014-09-27
    • 1970-01-01
    • 2019-09-26
    相关资源
    最近更新 更多