• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录

奋斗中...

曾经的程序员。ASP.NET/C#, JavaScript, PL/SQL, T-SQL; 工具: VS2003/2005, Oracle, SQLServer; 偶尔写点CSS, 批处理.
头脑中经常有新想法, 可惜没有去实现.
Never give up.
Never get into a fight with a pig. Both of you will get dirty. But the pig actually enjoys it.
  • 博客园
  • 联系
  • 订阅
  • 管理

公告

View Post

[JavaScript]IE7,IE8浏览器请求本地资源出现access is denied拒绝访问[转载]

转载自: http://www.code-design.cn/article/20100910/2844.aspx

在IE7,IE8中,如果双击运行html页面或者直接拖拽html静态页面进入IE7,IE8浏览器中运行查看ajax效果,在xhr对象调用open方法时会出现access is denied拒绝访问的错误,这个是因为IE7,IE8增加了Native XMLHTTP【XMLHttpRequest对象】支持,在IE7+浏览器下创建ajax对象时如果创建的是MLHttpRequest对象,由于安全设置的问题,是不允许访问本地资源的。

  而IE6不支持XMLHttpRequest对象,而是使用acx来创建ajax对象,所以双击运行或者拖拽进入浏览器中浏览不会出现access is denied 拒绝访问错误。IE7或者IE8使用acx来创建时也不会出现access is denied拒绝访问的错误。


有两个解决问题的办法

1.设置浏览器安全。
  点击“工具”->“Internet选项”->“高级”,在“安全”节点下找到“启用本机XMLHTTP支持”,该选项默认是钩选,禁用它后可以解决问题。

2.在创建ajax对象时先判断ActiveXObject对象,使用ActiveXObject对象来创建ajax对象

-JavaScript
var xhr=false;
if(window.ActiveXObject){
    try{xhr = new ActiveXObject("Msxml2.XMLHTTP.4.0");}
    catch(e1){
      try{xhr = new ActiveXObject("Msxml2.XMLHTTP");}
      catch(e2){{xhr = new ActiveXObject("Msxml2.XMLHTTP");}}
    }
}
else if(window.XMLHttpRequest){
/*XMLHttpRequest放最后来创建,这样在IE7,IE8中双击运行或者拖拽进入浏览器中浏览就
不会出现access is denied 拒绝访问错误了,因为使用的是acx来创建ajax对象*/

   xhr= new XMLHttpRequest();
}


  其实建议还是先判断XMLHttpRequest对象,因为XMLHttpRequest对象的版本比acx高,高版本的ajax对象错误和性能上都比较好。

  因为网站最终都是要向外发布的,然后通过http协议来访问,这样就不会出现“双击运行或者拖拽进入浏览器”的可能。而通过http协议来访问的话请求的资源只要不跨域,是不会出现access is denied 拒绝访问的错误的。

  如果为了测试方便而“双击运行或者拖拽进入浏览器”来查看效果,就得使用上面的方法来解决出现access is denied拒绝访问的错误了。

posted on 2011-04-07 13:29  jes  阅读(2170)  评论(0)    收藏  举报

刷新页面返回顶部
 
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3