如何捕获从 iframe 内部抛出的异常?

Posted

技术标签:

【中文标题】如何捕获从 iframe 内部抛出的异常?【英文标题】:How can I catch an exception thrown from inside an iframe? 【发布时间】:2012-07-27 06:55:48 【问题描述】:

如何捕获 iframe 中引发的异常?

这是我的代码:

家长:

        iframe = document.createElement("iframe");
        iframe.src = "../a.aspx";
        iframe.style.display = "none";
        document.body.appendChild(iframe);

以及a.aspx里面的代码:

    protected void Page_Load(object sender, EventArgs e)
    
            GenerateKey();
            //This function throws an exception, and I want to catch it in the parent window (javascript)
    

我想在打开 iframe 的页面中捕获异常并显示警告框。 我尝试了 iframe.contentWindow.onerror,但没有成功。

感谢您的帮助,

英巴尔。

【问题讨论】:

纠正异常错误 - 不要试图找到解决方案来捕获它。 @Aristos - 我想向用户显示错误,但我想在父页面内执行此操作。这是“更正”。 当您遇到异常时(捕获它):呈现在父级上显示消息的 javascript 代码。没有别的办法,当你的 iframe 抛出异常时,父页面没有运行。 我在 iframe 服务器端试过这个: Page.ClientScript.RegisterStartupScript(this.GetType(), "Error", "parent.test();", true);但它没有用。你有什么建议吗?非常感谢! 【参考方案1】:

跨域可能不允许您控制 iframe。 在您的 iframe 页面中,您可以捕获它的异常并调用父函数来显示它。

try
//something
catch(e)
   window.top.some_public_function(e);
   //window.parent.some_public_function(e) is also work

【讨论】:

异步抛出的异常如何处理? @AlexPashkov 你能更具体一点吗?例子?最好只创建一个问题

以上是关于如何捕获从 iframe 内部抛出的异常?的主要内容,如果未能解决你的问题,请参考以下文章

如何捕获 node_modules 中抛出的异常

如何从父文档中捕获 iframe 内部的刷新?

为啥内部异常到达 ThreadException 处理程序而不是实际抛出的异常?

如何使用 Aspectj 捕获和抑制 Java 类抛出的异常

MySql PDO 和二级内部过程调用中抛出的异常

JUnit:可能'期望'包装异常?