iframe 上的 Jquery ajaxError 处理程序不起作用

Jquery ajaxError handler on iframe not working

提问人:Carlos Jaime C. De Leon 提问时间:10/17/2023 最后编辑:Carlos Jaime C. De Leon 更新时间:10/19/2023 访问量:41

问:

我正在开发在主窗口中具有 iframe 文档的应用程序。此 iframe 来自同一公司内的另一个库,但归另一个团队所有,因此无法在短时间内对其进行任何更改(共享组件/库)。

因此,作为临时解决方案,我正在从我们的代码库(即主窗口)添加代码,该代码库将侦听 iframe 事件并做出相应的响应。我需要的第一件事是能够在 iframe 中添加一个处理程序 (https://api.jquery.com/ajaxError/),该处理程序使用 jQuery 进行所有 XHR 调用,因此我应该能够监听 ajax 错误。ajaxError

这是我的代码:

const iframeEl = document.querySelector('.child-iframe'); 
$(iframeEl) //tried both with iframeEl.contentWindow and iframeEl.contentWindow.document
    .on(
            'ajaxError',
            (event, jqxhr, settings, thrownError) => console.log(event)
    );

在 iframe 在其 src 属性中加载 html 文档后,我正在执行上述代码(我可以确认这一点并排除了 iframe 加载侦听器的代码),但是从未调用过此处理程序。ajaxError

有人可以让我知道上面的代码有什么问题吗?

javascript jquery iframe

评论

0赞 Barmar 10/17/2023
我认为您需要将事件处理程序绑定到 iframe 的。.contentWindow
0赞 Barmar 10/17/2023
尝试$(document.querySelector('.child-iframe').contentWindow).on.(...)
0赞 Carlos Jaime C. De Leon 10/17/2023
@Barmar - 我已经尝试了 .contentWindow 和 .contentWindow.document,将更新问题以提及

答:

-1赞 Carlos Jaime C. De Leon 10/19/2023 #1

终于找到了解决方案。

棘手的部分是确保在 iframe 上添加 jQuery ajaxError,而不是父窗口的 jQuery。

是的 - 有 2 个 jQuery 实例,每个窗口和文档对象 1 个:

  1. 父窗口和文档对象
  2. iframe 窗口和文档对象

这对我有用:

const iframeEl = document.querySelector('.child-iframe'); 
iframeEl.contentWindow.jQuery(iframeEl.contentWindow.document) // this is the important bit, you need to access the iframe's jQuery
.on(
            'ajaxError',
            (event, jqxhr, settings, thrownError) => console.log(event)
    );