You need to enable JavaScript to run this app. Node WebKit中如何通过PAC脚本实现按主机匹配的自定义代理配置
优惠活动
大模型
产品
解决方案
定价
更多

Node WebKit中如何通过PAC脚本实现按主机匹配的自定义代理配置

可实现,无需额外搭建本地Web服务

实现原理

NW.js 基于的 Chromium 网络栈原生支持通过 data: URI 加载内联 PAC 脚本,不受本地file://协议的安全限制,也不需要将PAC文件托管到Web服务器。动态生成的PAC内容可直接编码为data URI传入App.setProxyConfig,实现和Chrome内联PAC完全一致的效果。

操作逻辑

  • 封装动态生成PAC内容的函数,根据传入的代理地址、端口拼接出匹配规则的PAC脚本
  • 将PAC脚本内容用encodeURIComponent编码,拼接成指定MIME类型的data URI:data:application/x-ns-proxy-autoconfig;charset=utf-8,<编码后的PAC内容>
  • 将拼接好的data URI作为第二个参数传入App.setProxyConfig,第一个参数传空字符串即可生效

参考代码

const ngui = require('nw.gui');

// 动态生成匹配规则的PAC脚本
function buildPacContent(proxyHost, proxyPort) {
  return `function FindProxyForURL(url, host) {
    // 主机名包含example时走指定代理,其余直连
    if (host.indexOf('example') > -1) {
      return 'PROXY ${proxyHost}:${proxyPort}';
    }
    return 'DIRECT';
  }`;
}

// 更新代理配置
function applyProxyConfig(proxyHost, proxyPort) {
  const pacRaw = buildPacContent(proxyHost, proxyPort);
  // 生成可被Chromium直接加载的data URI
  const pacUri = `data:application/x-ns-proxy-autoconfig;charset=utf-8,${encodeURIComponent(pacRaw)}`;
  ngui.App.setProxyConfig('', pacUri);
}

// 初始化代理示例
applyProxyConfig('127.0.0.1', 8888);

原有方案痛点的对应解决

  • 无需写本地文件、启动Express服务托管PAC,逻辑链路短,无额外冗余操作
  • 移除了同上下文运行Web服务的开销,setProxyConfig的回调延迟、UI卡顿问题彻底消失
  • 因为每次动态生成的PAC内容变化时,对应的data URI字符串会同步变化,不会命中Chromium的PAC缓存,不存在更新配置失效的问题。若遇到极端情况配置不生效,仅需在更新前临时调用一次ngui.App.setProxyConfig('direct://', ''),间隔10~20毫秒再传入新的PAC配置即可,无额外复杂操作。

内容的提问来源于stack exchange,提问作者nick_j_white

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.05 03:45:11