我需要在我的 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 获得实现,但必须有更好的方法,因为这些是应该已经可用的浏览器功能。
最佳答案
你想要做的事情根本不可能。这是因为您请求的每个 url 都会评估一个 pac 文件。因此,“pac 响应字符串”不是可以在设置代理设置时返回的常量。
如果您正在尝试调试 pac 文件,您可以在返回设置之前在 alert('settings')
中添加 FindProxyForURL
。警报会创建一个日志条目,可以通过 chrome://net-internals/#events
功能访问该条目。
如果只想测试用户是使用直连还是代理,可以对比设置代理设置前后的外部ip地址。结帐 ipify.org 或者您甚至可以在您自己的 Web 服务器上使用脚本。
这是一些示例代码:
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)
})
});
关于javascript - 如何检查 Pac 脚本的响应,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58156492/