细心的朋友可能和我一样早就发现这个问题了,打开http://www.maxthon.cn后页面上方会动态实时的显示maxthon被下载的次数,如下图:

但是如果你打开的是http://maxthon.cn会发现这个功能失效了,显示在页面上的是

这个问题貌似已经很久很久了,如果我记忆力足够好的话我发现这个小问题已经有一年时间了,原以为maxthon的开发人员会在不久就修改掉,可惜没有,我查看了这页面和其附属的js代码,大概知道是什么原因造成的了;
首先,页面上下载次数是一个指定id的span,然后用js去修改这个obj的innerHTML,目前大家好像都是这样做的;页面代码如下:
<span class="downloadNowCounter">已有 <span id="counternumber">.........</span> 次下载</span>
然后我在其页面附属的js里找到了:
maxWebsite.counterDataURL = "http://www.maxthon.cn/api/counter";
及相关函数,相关函数不再赘述,问题就出在这句代码里;用浏览器打开http://www.maxthon.cn/api/counter得到的是一个数字,与页面正常显示的下载数字格式是一样的,这也就是下载数量的source,js每秒都会触发这个链接从而得到这些数字然后用getElementById的方法将得到的数字写入预先定义好id的span里,但为什么这里会出错呢?
用FF打开http://maxthon.cn,在错误控制台里可以看到N条警告,即“安全错误:位于http://maxthon.cn/的内容不可以载入来自http://www.maxthon.cn/api/counter的数据。”
我的理解是:这里的http://www.maxthon.cn/api/counter走的http协议,就如PHP的file_get_contents一样,如果不写http地址,只写出php相对路径,只会读取那个PHP文件,而不会用php去解析此文件;但是这里的js自身的安全不允许载入非本域名以外的内容,所以导致此效果没有实现;
我想解决办法很简单,在js中加载http://www.maxthon.cn/api/counter的时候判断一下域名,即如果是用http://maxthon.cn访问网站就该加载http://maxthon.cn/api/counter,这样问题自然接就解决了;
写完这文章我自己也觉得此文貌似没有任何意义,不过我觉得像maxthon这样的公司对自身和产品还是精益求精的比较好,毕竟浏览器和用户的关系很密切,而且maxthon有很大一批忠实用户;
Comments