提问人:Carlos Jaime C. De Leon 提问时间:10/17/2023 最后编辑:Carlos Jaime C. De Leon 更新时间:10/19/2023 访问量:41
iframe 上的 Jquery ajaxError 处理程序不起作用
Jquery ajaxError handler on iframe not working
问:
我正在开发在主窗口中具有 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
有人可以让我知道上面的代码有什么问题吗?
答:
-1赞
Carlos Jaime C. De Leon
10/19/2023
#1
终于找到了解决方案。
棘手的部分是确保在 iframe 上添加 jQuery ajaxError,而不是父窗口的 jQuery。
是的 - 有 2 个 jQuery 实例,每个窗口和文档对象 1 个:
- 父窗口和文档对象
- 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)
);
评论
.contentWindow
$(document.querySelector('.child-iframe').contentWindow).on.(...)