通过AJAX替换整个页面只会导致IE中的Permission Denied错误

Replacing entire page via AJAX causes Permission Denied error in IE only

本文关键字:IE 中的 Permission 错误 Denied 替换 AJAX 通过      更新时间:2023-09-26

我有一篇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。