Mik*_*fer 14 javascript asp.net internet-explorer
在我们(相当大和旧)的ASP.NET应用程序中,我们使用大量页面加载到框架,iframe和模态对话框中(使用window.showModalDialog).我们开始看到上面的错误很多,我似乎无法在任何地方找到一个合理的解释.
弹出窗口拦截器.不.我们没有运行它们.甚至没有内置阻止器.
可信区域.不.该应用程序现在在LocalHost上运行,它位于受信任的站点列表中.
迷路宇宙射线.可能,但不太可能.这太过一致了.
我也终于找到埋在微软的网站上的错误消息,一些尘封的大部头有关检索自动化错误消息的信息.在其中,他们谈论的是Excel,他们说:"在这个例子中,Microsoft Excel是服务器应用程序.一旦工作簿对象被销毁(或关闭),就会生成错误. "
这可能就像我对错误原因的解释一样接近,没有真正的具体解释.有人试图在引用它之后使用某些东西.奇怪的是,你仍然可以在屏幕上看到窗户.然而奇怪的是,这种怀疑嫌我接受的答案来的这个.
所以这就是发生的事情.
如果有人可以告诉我为什么会这样(代码在FF中工作),我会很感激.
Joh*_*ika 11
虽然我的答案不能直接适用于这个特定的问题,但如果你收到这个错误(被调用者(服务器[不是服务器应用程序])不可用并且消失;)在弹出窗口和开启窗口之间进行通信时,这是因为弹出窗口创建了一个对象,然后将其传递给开启窗口.当弹出窗口关闭时,Internet Explorer会终止弹出窗口创建的所有对象.并且由于对象是通过引用传递的,因此开启窗口引用的对象现在已经消失.一个简单的解决方法是通过使用JSON.stringify将对象转换为JSON字符串来传递值.然后,您可以使用JSON.parse()将字符串转换回window.opener中的对象.
例:
弹出窗口:
window.opener.callback(JSON.stringify({
id: 1,
name: "foo"
}));
Run Code Online (Sandbox Code Playgroud)
开瓶器窗口:
window.callback = function (response) {
var foo = JSON.parse(response);
};
Run Code Online (Sandbox Code Playgroud)
使用此方法,开启窗口不再引用在弹出窗口中创建的对象,因此在弹出窗口关闭后,开启窗口中的对象将继续存在.
我应该早点更新这个问题,并为延迟道歉.自从我发布以来,我学到了一点,这就是我所学到的.
对于使用window.showModalDialog打开的窗口,window.opener方法返回null,而不是对打开窗口的引用.要获得对打开窗口的引用,您必须将其作为对话框参数传递.
在这一点上我不清楚这是否是预期的行为; 这显然是无证件的行为.此外,根据MSDN,window.opener仅对加载到帧和iframe中的页面有效.
| 归档时间: |
|
| 查看次数: |
14859 次 |
| 最近记录: |