今天开发一个浏览器 bookmarklet 的应用,加载一些 Javascript。
在 Firefox 上测试都很顺利,搬到 IE 上居然不能执行!
点击书签后,仔细观察浏览器的反应,看到状态栏突然出现一个图标,是“隐私报告”,打开后,提示我要访问的网站有第三方 cookie,已被阻止。
我就很奇怪了,另一个 bookmarklet 应用是同一套流程开发的,怎么没出现这样的问题?
把两边的代码改成一样的,结果还是不行!
把浏览器的设置全部重置一遍,依然不行。
我已经要抓狂了!
最后,我抱着试试看的想法,把书签的 url 路径改了一下,在测试,居然成功了!
后来分析,是因为 url 中包含一个单词 “collect”!
原来 IE 发现你的 script 的 src 是第三方域名,并且路径包含 collect,就会自动阻止访问!
IE 真是满身坑啊!
——–
2012-2-24 更新
之前的理解有误,不是单词的问题。资源不能加载成功的原因是 javascript 代码不严谨,定义数组的最后一个元素以逗号 “,” 结尾了。在 Firefox 下没问题,在 IE 下会失败。
关于隐私错误,我进一步的理解是:请求跨域的 script 资源,浏览器会把第三方域名的 cookie 附带在请求中一起发出去。IE 会对部分 cookie 做限制。
如果第三方希望通过 cookie 获取用户状态,在 IE 设置了高级别的隐私政策后,有可能失效。