javascript - 如何检查 Pac 脚本的响应
问题描述
我需要在我的 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
});
编辑:我尝试使用从远程 pac 文件JQuery.getScript
加载,FindProxyForURL
但现在 pac 特定功能isPlainHostName
现在未定义。
我可以从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 - 防止脚本在异步操作中运行两次(真/假)
- asp.net - 在 Razor 页面中使用带有树对象的模型绑定和递归渲染?
- vue.js - 在字符串中使用'\ n'的新行在vue js中不起作用
- javascript - 当 javascript 更改文本时,防止 HTML 视口重置
- python - Python Selenium 不允许我登录祖先
- c++ - [cgal]; 使用 OpenMP 的段错误错误并行代码
- sql - 在一个表中查找不与第二个表中的日期范围重叠的日期范围
- reactjs - 如何将任何带有 chakra ui Portal 组件的组件传输到 dom 节点?
- shopify - 获取订单和变体 Shopify 其缓慢
- python - 为什么 exec() 或 os.system 在 pywin32 Windows 服务中不起作用?