【问题标题】:Try-catch when loading an url in iframe using jQuery's attr("src", url)使用 jQuery 的 attr("src", url) 在 iframe 中加载 url 时尝试捕获
【发布时间】:2020-01-28 12:03:37
【问题描述】:

我有一个 JS 脚本,它可以像这样在 iframe 中加载网页的内容:

$("#iframeid").attr( "src", url );

现在,由于跨域违规,url 的网页上出现了安全错误。该网页有一些 JS 代码尝试访问 window.parent 并由于跨域而失败。除此之外,网页加载正常。

我希望能够在我的脚本中捕捉到这个错误(并简单地记录它)。我正在尝试按如下方式使用 try-catch:

try {
    $("#iframeid").attr( "src", url );
}
catch(err)
{
    console.log(err);
}

但它没有捕捉到错误。我的猜测是 try 代码在网页加载之前完成执行。

有没有办法让我在我这边捕捉到这个错误?谢谢。

【问题讨论】:

  • 只是一个注释,以确认您对页面加载结果的怀疑未与 try-catch 同步结束。页面加载是一个异步过程,页面中提到的资产的到达顺序没有特定的顺序,除非您非常努力地实现这一点。可以通过查看页眉来识别加载错误,页眉本身已经被问过 - 请参阅stackoverflow.com/questions/220231/…
  • 显然您可以通过 Ajax 发出 HEAD 请求,这可能是一种可行的方法,例如,您在主页中发出 head 请求并查看您得到的结果 - 如果您收到 CSS 错误,那么您不要进行 iframe 加载。获取的格式为 xmlhttp.open("HEAD", the_url, true);
  • 您好,感谢您的 cmets。错误不是来自 CSS,而是来自网页上的 JS 脚本,它试图调整 parent.window 的大小,但由于跨域而失败。这是预期的行为,除了网页加载得很好。所以我只是想抓住这个错误并忽略它。

标签: javascript jquery iframe try-catch


【解决方案1】:

看起来像以前问过 - 请参阅 How to catch JavaScript errors in all Iframes (with window.error)?

似乎您可以使用附加到 iframe 的 window.onerror() 侦听器来捕获脚本错误。

MDN here.MDN here.window.onerror() 侦听器的一般信息

【讨论】:

  • 谢谢,我不知道window.onerror。不过,它似乎没有发现我的错误,这可能是因为跨域问题 - 显然 onerror 仅在两个页面位于同一域中时才有效:stackoverflow.com/questions/6327128/…
  • 嗯 - 好的,很抱歉草草下结论。可能很难使用浏览器中通过同源策略进行的跨站点脚本(我的意思是 CSS)保护。祝你好运!
  • 别担心,谢谢您的建议。是的,由于安全限制,您似乎无法捕获此类错误。幸运的是,我的脚本是一个更大的 Qt 应用程序的一部分,我最终在其中发现了错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-02
  • 1970-01-01
  • 1970-01-01
  • 2015-02-11
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
相关资源
最近更新 更多