我试图设置一个可能用于IE6客户端的proxy.pac文件。 这基本上是这样的:
function FindProxyForURL(url, host) { if (shExpMatch(host, "*example.com*")) return "DIRECT"; return "PROXY 1.2.3.4:8080"; }
该文件告诉浏览器,任何试图访问匹配"*example.com*"的主机的客户端应该使用直接连接,否则使用代理。
这基本上在任何浏览器工作正常,但IE6从来没有匹配的shExpMatch无论我尝试。 我已经阅读了这个,并按照这里描述的禁用caching,但无济于事。
我是积极的IE6支持shExpMatchfunction,但如果有人想纠正我,我会很高兴听到它。 顺便说一句,这是运行在WinXP SP2上。
这是我在客户站点使用的稍微修改的WPAD.DAT。 它在IE6上工作正常,未经修改…(因为他们不会让我继续升级到IE8)。 我唯一的修改是模糊客户的域名。
function FindProxyForURL(url, host) { if ( isPlainHostName(host) ) { return "DIRECT"; } if ( shExpMatch(url, "https:*") ) { return "DIRECT"; } if ( shExpMatch(url,"http://*.customer.domain.com")) { return "DIRECT"; } if ( isInNet(host,"127.0.0.1", "255.255.255.255") ) { return "DIRECT"; } if ( isInNet(host,"10.35.0.0", "255.255.0.0") ) { return "DIRECT"; } if ( isInNet(host,"192.168.0.0", "255.255.0.0") ) { return "DIRECT"; } return "PROXY proxy.customer.domain.com:8080"; }
我所看到的唯一区别就是在开始时你并不是匹配“http:”,但那应该不重要。
你不应该这样做,但你可以把alert()语句和IE6将显示它们。 这样做可能会在debugging中获得一些牵引力。
我知道你已经解决了这个问题,但是对于那些偶然发现的人来说,在PAC文件中,对于shExpMatch函数,在IE中有一个限制(按devise),只有*和? 支持正则expression式通配符。 另一种方法是使用正则expression式对象,并调用传递给host或url的testing方法作为参数:
var regex = /*example.com*/; if(regex.test(host)) return "DIRECT"; return "PROXY 1.2.3.4:8080";