首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Web前端 >

跨域的时候报“没有权限”异常

2012-08-30 
跨域的时候报“没有权限”错误转http://blog.csdn.net/wolfcyl/article/details/6612089加try{//报错代码}ca

跨域的时候报“没有权限”错误
转http://blog.csdn.net/wolfcyl/article/details/6612089

try{
//报错代码
}catch(e){}

try{
//报错代码
}catch(e){
setTimeout(arguments.callee,0);
}

引用

 IE下使用location对象有时会出现“没有权限”的错误分类: Javascript 2011-07-17 13:50 32人阅读 评论(0) 收藏 举报发生错误都是一个原因:没有权限(Permission denied)。从网上查了一下,没有权限实在是一个太常见的提示,微软自己都提供了很多更新来解决本不应该出现的“没有权限”问题。很难讲那些10%的用户是没有安装哪个补丁导致的问题。    PV代码很简单,如下:    (function() {        var a = [], n = document.createElement('script');        a.push('url=' + encodeURIComponent(location.href));        a.push('referrer=' + encodeURIComponent(document.referrer));        n.src = '....pv.gif';        document.getElementsByTagName('head')[0].appendChild(n);    })();    最有可能没有权限的代码就是location,因为之前也遇到过跨域时使用location提示没有权限的问题,因此缩小了范围,把代码改成了:    (function() {        var a = [], n = document.createElement('script');        try {            a.push('url=' + encodeURIComponent(location.href));        } catch (e) {            setTimeout(arguments.callee, 0);            return;        }        a.push('referrer=' + encodeURIComponent(document.referrer));        n.src = '....pv.gif';        document.getElementsByTagName('head')[0].appendChild(n);    })();    这样修改,数据正常了,问题解决了,但缺没有合理的解释,为啥这样使用location会提示没有权限。可能我们的代码有些特殊,上面这段js是放在一个script标签上,这个标签的最开始还有一段别的代码(当然也很简单),其中会设置一下document.domain,但是设置的document.domain就是当前的这个域,而且这个标签放在head标签的最开始,没有什么iframe和 script标签,因此也不会出现多重设置域的问题,理论上也不会出错。现在的整个片段是这样的:<head><script type="text/javascript">    document.domain = 'bai.sohu.com';    ...  //  简单代码    (function() {        var a = [], n = document.createElement('script');        try {            a.push('url=' + encodeURIComponent(location.href));        } catch (e) {            setTimeout(arguments.callee, 0);            return;        }        a.push('referrer=' + encodeURIComponent(document.referrer));        n.src = '....pv.gif';        document.getElementsByTagName('head')[0].appendChild(n);    })();</script>    这是啥问题?只能说这是ie的bug,成因为:    1. 代码都在一个script中,并且在一个队列中执行    2. 之前会设置document.domain,并且等于当前的域    3. 后面的代码会使用location对象    如果具备这些条件,那在某些ie下,会报“没有权限”的错误。    有两个解决方法:    1. 使用location时进行try catch,如果发现是没有权限的问题,可以把代码放到下一个执行队列中(setTimeout)    2. 直接放到两个独立的script标签上,一个上设置document.domain,一个是使用location,这样应该也能解决(是根据上面的理论得出,没有经过测试)

热点排行