javascript - JS : "The callee (server [not server application]) is not available and disappeared." accessing window. 开瓶器

标签 javascript asp.net internet-explorer

在我们的(相当大和旧的)ASP.NET 应用程序中,我们使用大量加载到框架、iframe 和模式对话框(使用 window.showModalDialog)中的页面。我们开始看到上面的错误,我似乎无法在任何地方找到一个合理的解释。

  1. 弹出窗口拦截器。没有。我们没有运行它们。甚至内置拦截器也不行。

  2. 可信区域。没有。该应用程序现在在 LocalHost 上运行,并且在受信任的站点列表中。

  3. 杂散宇宙射线。可能,但不太可能。这太一致了。

确实最终在 some dusty tome 中找到了隐藏在 Microsoft 网站上的错误消息关于检索自动化错误消息信息。在其中,他们在谈论 Excel,他们说:“在这个例子中,Microsoft Excel 是服务器应用程序。在工作簿对象被销毁(或关闭)后引用它会产生错误。

这可能是我对错误原因的最接近解释,没有真正具体的解释。 有人在对某个东西的引用被处理后试图使用它。 奇怪的是,您仍然可以在屏幕上看到这些窗口。然而,奇怪的是,这让我对 this 的公认答案感到怀疑。 .

这就是发生的事情。

  • 页面 A 是主页。
  • PageA 在框架中显示 PageB。 PageB 是一个工具栏。
  • PageA 在另一个框架中显示 PageC。这就是内容。
  • PageC 在非模态对话框中显示 PageD。
  • PageD,出于我不知道的原因,想要修改 PageB 中的控件。它试图使用 window.opener 来做到这一点,但失败得很厉害。

如果有人能告诉我为什么会这样(代码在 FF 中有效),我将不胜感激。

最佳答案

虽然我的回答并不直接适用于这个特定问题,但如果您在通信时遇到此错误(被调用者(服务器 [非服务器应用程序])不可用并消失;)在弹出窗口和开启窗口之间,这是因为弹出窗口创建了一个对象,然后将其传递给开启窗口。当弹出窗口关闭时,Internet Explorer 会杀死弹出窗口创建的所有对象。由于该对象是通过引用传递的,因此打开器窗口引用的对象现在已经不存在了。一个简单的解决方法是通过使用 JSON.stringify 将对象转换为 JSON 字符串来按值传递。然后,您可以使用 JSON.parse() 将字符串转换回 window.opener 中的对象。

例子:

弹窗:

window.opener.callback(JSON.stringify({
    id: 1,
    name: "foo"
}));

开启器窗口:

window.callback = function (response) {
    var foo = JSON.parse(response);
};

使用这种方法,opener window 不再引用在弹出窗口中创建的对象,因此 opener window 中的对象将在弹出窗口关闭后继续存在。

关于javascript - JS : "The callee (server [not server application]) is not available and disappeared." accessing window. 开瓶器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3840066/

相关文章:

powershell 中的 html 对象错误

javascript - "Object doesn' t 支持此属性或方法“IE 7,8 & 9 中的 AJAX 错误

css - Windows 8.1 IE Snap View 分屏响应式网页设计

javascript - 快速单击复选框时出错

javascript - 使用 fetch 添加 Omdb Api?

javascript - 我无法移动节点,力图不适用于 3.js

c# - 如何按列分隔DataTable并存储以备后用

javascript - 将 Observable 用于 AWS cognito 回调

asp.net - 使用 Visual Studio 2010 中的工具箱从 MySQL 服务器提取数据时,不断出现错误

c# - Entity Framework 、Fluent API 映射,是否应该在 OnModelCreating 以外的地方完成?