通过AJAX替换整个页面只会导致IE中的Permission Denied错误
Replacing entire page via AJAX causes Permission Denied error in IE only
我有一篇AJAX文章,它从服务器检索数据,并替换部分页面,或者在某些情况下替换整个页面。这是由javascript fullRefresh参数控制的。问题是刷新代码可以在Firefox中找到,但在JQuery在IE中运行后,在JQuery内部会导致"拒绝权限"错误,尽管它看起来确实成功地替换了页面内容。
IE版本11.0.9600.16659
JQuery 1.8.2版
Error message
Unhandled exception at line 2843, column 3 in http://localhost:62761/Scripts/jquery-1.8.2.js
0x800a0046 - JavaScript runtime error: Permission denied
我的代码是
function RefreshScreenContent(formActionUrl, formHTML, fullRefresh) {
fullRefresh = (typeof fullRefresh === "undefined") ? false : fullRefresh;
if (fullRefresh) {
document.write(formHTML);
document.close();
}
else {
$("#content-parent").html(formHTML);
}
}
部分刷新可以正常工作,但完全刷新是个问题。我曾尝试对document.write调用进行硬编码,以编写一个格式良好的简单html页面,而不是formHTML,以防出现问题,但即使是一个简单的单词页面也会导致错误。
实际错误发生在JQuery内部的回调之后。
AJAX发布到服务器是在同一个应用程序中,即不是跨域请求。我在网上看到过一些关于跨领域内容的帖子,这些内容在这里不适用。
有人能告诉我为什么会发生这种事以及如何阻止它吗?是否有替代IE的方式来替换页面内容?
您的代码很好(至少乍一看是这样)。我的猜测是,你以这样一种方式进行调用,它被解释为跨域。
我建议检查:
- http与https(最常见)
- 目标端口
- 根url
- 也许"目的地"页面会自己发出一些请求,检查是否在同一域上
IE可能是唯一一个有问题的浏览器,因为默认情况下,它对安全性的要求比其他浏览器更高(检查高级安全设置-记不清它们在菜单中的位置),所以它以更"偏执"的方式解释请求。
我重复一遍,我所说的只是一个猜测,基于我所经历的案例。
最后,我使用这里的方法将pgae中的body标记替换为AJAX收到的标记中的body标签https://stackoverflow.com/a/7839921/463967
我宁愿替换所有内容,而不仅仅是正文,但我可以随时调整以包括标题等,因为正文现在已经足够我使用了。这适用于IE和Firefox。
- 为什么这在IE中的工作方式与在Firefox中不同
- jQuery blueimp文件上传:将N-1个文件上传到IE中的服务器
- IE中的CSS翻转动画:翻转的一面显示镜像内容
- 是否可以在javascript中读取IE中的本地文件
- IE中的Onload()处理程序没有响应
- 从IE中的不同元素调用时,文件输入控件未正确启动
- IE中的CSS翻转动画:翻转的一面显示镜像内容
- 如何修复FF和IE中的Javascript无效日期错误
- 使用YouTube iFrame API的IE中的JavaScript问题
- IE中的目中无人.js支持
- 正在获取IE中的表单元格内容
- jQuery Div滚动功能:IE中的问题
- jQuery跨域发布在IE中的数据
- 无法从IE中的data.responseText获取结果,但在其他浏览器中工作
- 追加子数据 URI,替换 IE 中的其他对象
- jQuery onClick() IE 中的音效和重定向
- 单击事件似乎不适用于 IE 中的选择元素
- IE中的Javascript命名空间抛出错误
- 使用空媒体查询调用matchMedia失败,IE中的参数无效
- 用modernizr测试ie中的指针事件