IE6 启用代理自动配置 (PAC) 后的一个必现 Bug

作者: nick 分类: js 发布时间: 2012-03-25 07:41 ė 6没有评论

最近从用户那里收到反馈说访问产品出现“白屏”,
由于版本上线前都必须在众多不同环境下通过测试,
于是猜想这个问题的出现与用户的浏览器设置有关;
进而联系用户来模拟其使用环境加以调试,
终于定位并解决了这个“非主流” Bug ,
记录如下以供各位参考。

这里先描述一下重现场景
必须同时满足如下所有条件:

  1. IE 6
  2. 启用了“代理自动配置 (PAC)”
  3. PAC 文件内容非空,且使用 http 协议访问
  4. 2页面引用了一个未经缓存的外部脚本
  5. 该脚本访问了 location 对象

该场景下访问页面会得到 Access Denied 错误(try catch 后如下图),
出错位置正是访问 location 对象的那一句。

访问 location 对象时报错

测试环境只对 IE6 启用了 PAC 而已,
其它设置均保持默认值,
所以除了说服用户升级浏览器或放弃使用 PAC 之外,
我们只能想办法去规避这个问题。

幸亏 document 对象下还挂着个 URL 属性,
它指向文档的实际地址,
且在绝大部分情况下等同于 location.href
因此我们只需要用正则利用 DOM 对象去分解它即可,
例如:

document.URL.match(/^([^:]+):\/\/(?:([^:@]+):?([^@]*)@)?(?:([^/?#:]+):?(\d*))([^?#]*)(?:\?([^#]+))?(?:#(.+))?$/);

本文出自 传播、沟通、分享,转载时请注明出处及相应链接。

本文永久链接: http://www.db.run/?p=1894

发表评论

电子邮件地址不会被公开。 必填项已用*标注

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>

Ɣ回顶部