<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>朱俊独立博客 &#187; PAC</title>
	<atom:link href="http://www.zhujun.org/tag/pac/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.zhujun.org</link>
	<description>邪恶获得胜利的唯一条件，就是善良的人们保持沉默。</description>
	<lastBuildDate>Sun, 05 Feb 2012 06:34:33 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Google Analytics统计代码出现JavaScript没有权限错误</title>
		<link>http://www.zhujun.org/web/google-analytics-javascript-permission-denied/</link>
		<comments>http://www.zhujun.org/web/google-analytics-javascript-permission-denied/#comments</comments>
		<pubDate>Tue, 12 Jan 2010 12:30:11 +0000</pubDate>
		<dc:creator>朱俊</dc:creator>
				<category><![CDATA[网络开发]]></category>
		<category><![CDATA[PAC]]></category>
		<category><![CDATA[没有权限]]></category>

		<guid isPermaLink="false">http://www.zhujun.org/?p=54</guid>
		<description><![CDATA[记述了Google Analytics 统计代码出现JavaScript没有权限错误的表现、特征、解决方法和心得结论。]]></description>
			<content:encoded><![CDATA[<p>近日，当我访问本博客时经常出现一个JavaScript没有权限的错误，如下图所示：<br />
<img src="/wp-content/uploads/2010/01/permission-denied.jpg" alt="javascript 没有权限 错误" /></p>
<h3>经过一些排查，发现这个JS没有权限的错误有如下特点：</h3>
<ol>
<li>打开网页时该错误只出现一次，似乎和缓存有关，网页刷新后消失。</li>
<li>在我的几个其它网站也会出现，出错位置均在Google Analytics统计代码附近。</li>
<li>仅在IE6下出现（IE7、IE8未测试），用Firefox和Chrome打开出错页面都没有错误提示。<span id="more-54"></span></li>
</ol>
<h3>尝试解决如下：</h3>
<ul>
<li>清空IE6缓存、Cookies并打开出错页面，发现错误消失，大喜。重新再开，错误又现！</li>
<li>登录Google Analytics后台，检查代码，没有问题。</li>
<li>去掉 【IE6 &#8211; 工具 &#8211; Internet选项 &#8211; 高级 &#8211; 禁用脚本调试（Internet Explorer）】菜单项的勾选，调试该网页，发现错误出现在如下代码：<code>var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");<br />
</code>观察变量发现document.location对象不可读取。</li>
</ul>
<p>原来问题出在document.location对象上，用Google进行一些搜索，发现location对象仅在iframe和ajax跨域访问的时候，才会由于安全问题而变得不可读，但我的网页既没有用ajax，也没有用iframe，难道被人挂马了？<br />
查看源代码，却没有发现任何问题。而我无论用什么关键字搜索，都找不到为什么不跨域访问的时候，也会出现location对象不可读取，导致JavaScript报“没有权限”的错误，至此问题陷入死胡同。</p>
<h3>变通的解决方法：</h3>
<p>虽然将：<code>var gaJsHost = (("https:" == document.location.protocol) ? "https://ssl." : "http://www.");<br />
</code>改成：<code>var gaJsHost = "http://www." ;</code>可以避免该错误出现，但是这样就会失去了对https协议的统计，另外我也很想知道到底是什么原因造成了location对象的不可读。</p>
<h3>柳暗花明又一村：</h3>
<p>由于我还有一台同样是Xp sp2/IE6的电脑，于是拿来测试出错网页，结果在该台电脑上一切正常。<br />
一定是IE的设置问题！<br />
于是用出错的电脑照搬了正常电脑IE6 Internet选项中“安全、隐私、内容、高级”的全部设置，结果却大失所望，出错的电脑，打开网页时，依然会报没有权限的JavaScript错误。</p>
<p>正当我准备放弃的时候，发现两台电脑的Internet选项 &#8211; 连接 &#8211; 局域网设置不一样，出错电脑勾选了“使用自动配置脚本”，参数如下：file://e:\list.pac。去掉对该项的勾选，打开出错网站，JavaScript“没有权限”的错误消失！</p>
<h3>关于pac文件的额外知识：</h3>
<p>热爱技术和自由的朋友一定知道SSH在国内网络环境下有其它的大用处，不过一旦配置了SSH的代理，则访问所有网页都需要通过该代理，影响速度、浪费带宽。<br />
配置pac文件作为脚本，可以指定访问特定网页时才走代理，否则就直接连接，完美解决上述SSH的缺陷。<br />
示例如下：<br />
<code>function FindProxyForURL( url, host )<br />
{<br />
if ( shExpMatch(url, "*free-site.org*")<br />
|| shExpMatch(url, "*.hecaitou.*")<br />
......<br />
|| shExpMatch(url, "*.another-free-site.com*")<br />
)<br />
return "SOCKS 127.0.0.1:7070";<br />
else<br />
return "DIRECT";<br />
}</code><br />
用文本编辑器创建list.pac，复制上述代码，将&#8230;&#8230;替换成如下形式（可以新增多行）：<br />
<code>|| shExpMatch(url, "*任意平时不能访问的网址*")</code><br />
保存至本地硬盘，然后在 工具 &#8211; Internet选项 &#8211; 连接 &#8211; 局域网设置 &#8211; 使用自动配置脚本，填入file://pac文件地址，如：file://c:\list.pac 即可（须注意/和\，不能写错）。</p>
<h3>结论：</h3>
<p>言归正传，终于知道了IE6为什么会报JavaScript没有权限的错误了，既不是iframe跨域访问，也不是ajax跨域访问，而是IE6对pac脚本的处理出现了Bug，可能使用pac后，IE认为访问所有网站都是跨域的，于是把location对象设成了不可读。<br />
那为什么刷新出错网页以后没有权限的错误就消失了呢？也许只有比尔.盖茨才知道了。</p>
<p>由于我本没有必要使用SSH和PAC文件，浪费如此多的时间排查错误，全拜为我服务的仆人们所赐，此时此刻，唯有天朝神兽能够代表我的心情： <img src='http://www.zhujun.org/wp-includes/images/smilies/icon_mad.gif' alt=':mad:' class='wp-smiley' />  <img src='http://www.zhujun.org/wp-includes/images/smilies/icon_mad.gif' alt=':mad:' class='wp-smiley' />  <img src='http://www.zhujun.org/wp-includes/images/smilies/icon_mad.gif' alt=':mad:' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.zhujun.org/web/google-analytics-javascript-permission-denied/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
	</channel>
</rss>

