`
haoningabc
  • 浏览: 1488364 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

跨域的时候报“没有权限”错误

 
阅读更多
转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,这样应该也能解决(是根据上面的理论得出,没有经过测试)
分享到:
评论

相关推荐

    tomcat服务器配置资源跨域问题

    最近在使用前端调取服务器静态资源的时候,总是报图片跨域的错误,该问题可以通过服务器配置跨域权限来解决。 首先下载cors-filter-2.5.jar和java-property-utils-1.9.1 1、把这两个jar包放在tomcat的lib下。 2、在...

    点击表单提交时出现jQuery没有权限的解决方法

    在开发Web应用时,我们经常会遇到表单提交引发的各种问题,其中包括“jQuery没有权限”的错误。这个错误通常意味着JavaScript在尝试执行某些操作时受到了限制,可能是由于浏览器的安全策略或者跨域政策导致的。本文...

    静态文件访问不到报No Access-Control-Allow-Origin处理办法

    如果目标服务器没有允许这个源的权限,浏览器会阻止该请求,从而出现"No 'Access-Control-Allow-Origin' header is present on the requested resource"的错误。这个问题在使用静态文件(如字体文件.eot, .ttf, ....

    redirect_uri参数错误的解决方法(必看)

    这通常发生在使用OAuth2.0授权协议进行身份验证和权限获取时。OAuth2.0是一种广泛使用的开放标准,允许用户授权第三方应用访问其私密资源,而无需分享其用户名和密码。当我们在微信开发或者其他类似服务中,如果出现...

    uni-app 网络请求提示 OPTIONS xxx 403 (Forbidden)

    403 Forbidden错误通常表示服务器理解了请求,但拒绝执行它,可能是因为服务器设置不允许特定类型的请求,或者缺少必要的权限。 在这个问题中,关键在于POST请求的header头。在默认情况下,如果未显式设置header,...

    接口API文档-202103-JCJC人工智能错别字校对系统技术接口文档4.5.pdf

    12. 严格模式和误报减少:通过添加白名单的方式可以覆盖系统之前的“误报”结果,减少“漏报”结果,从而提升错别字检测的准确性。 13. OCR扫描技术:文档中提到的OCR扫描技术问题,表明系统能够处理从图像文档中...

    html2canvas-0.4.1

    5. **错误处理**:在实际应用中,可能出现各种意外情况,如图片无法加载、用户权限问题等,因此良好的错误处理机制是必不可少的。 6. **跨域问题**:如果页面中包含跨域的资源,如图片,需要确保服务器配置了正确的...

    宇视 接口类帮助文档说明

    2. **错误处理**:查看接口的异常处理机制,学习如何处理可能出现的错误和异常。 3. **示例代码**:如果文档中包含示例,应仔细研究并尝试运行,以加深理解。 4. **版本兼容性**:确认接口类与你正在使用的宇视...

    AD 活动目录trouble shooting,英文版。MS出品

    - **信任关系建立失败**:在建立跨林或跨域的信任关系时出现问题,需要检查双方的配置设置及DNS记录是否一致。 ##### 3.3 故障排查工具和技术 为了更高效地进行故障排查,文档还推荐了几种常用的工具和技术: - *...

    html2canvas.min.zip

    3. 错误处理:在实际使用中,需要考虑异常情况,例如图片加载失败、权限问题等。 总结来说,html2canvas是一个强大的工具,它允许我们在客户端直接将HTML元素转换为图片,为Web应用增加了新的可能性。无论是在社交...

    企业可信认证中心建设方案.docx

    - 支持分级用户管理,实现不同权限的用户控制。 2. 统一认证系统: - 支持多种认证方式,包括PKI/CA(X.509V3)、动态口令、智能卡、生物特征和用户名/密码。 - 结合PKI/CA体系,利用数字证书技术实现高强度身份...

    基于PHP的电影网带独立播放器源码.zip

    3. **用户认证与权限管理**:为了保护资源,网站可能需要用户登录,这涉及到session或cookie的使用,以及用户权限的控制。 4. **路由与URL重写**:用于处理用户请求,提供友好的URL结构。 5. **模板引擎**:如Twig或...

    python入门到高级全栈工程师培训 第3期 附课件代码

    05 Python 错误更正:布尔值可以作为字典的key 06 Python 今日内容整理 第13章 第13章共1课 第14章 01 数据类型和变量总结 02 集合定义和基本操作方法 03 集合关系运算交,差,并集 04 集合的其他内置方法 05 ...

    电影现场

    10. **错误处理**:JavaScript可以捕获运行时错误,并进行相应的错误处理,提供友好的错误提示,保证网站的稳定运行。 在"movie-site-master"这个项目中,我们可以期待看到一个利用JavaScript技术实现的电影信息...

    NiaoMvc:一个 mvc 框架

    5. **中间件**:中间件是一段可以拦截请求并在控制器处理之前执行的代码,常用于日志记录、权限检查、跨域请求处理等通用任务。NiaoMvc允许开发者自定义中间件,增强应用的功能。 6. **依赖注入**:NiaoMvc可能采用...

Global site tag (gtag.js) - Google Analytics