如何停止在注入时触发加载事件的空 iframe?

Posted

技术标签:

【中文标题】如何停止在注入时触发加载事件的空 iframe?【英文标题】:How to stop an empty iframe triggering a load event on injection? 【发布时间】:2013-03-20 06:35:56 【问题描述】:

我是using an empty frameto handle pseudo-asynchronous form submission。对于那些不熟悉该技术的人,这个想法是在表单的target 属性中引用框架的name 属性,这样表单的action 的URI 在框架中解析并且用户体验是' t被打断了。

为了反馈给用户,我需要使用脚本来监听表单上的 loaderror 事件,因为这实际上使整个 UX 脚本依赖于,我只注入框架并添加表单的目标引用通过脚本。

问题是框架一注入页面就会触发加载事件:default behaviour。

我可以使用 jQuery 的 one 方法和 e.stopImmediatePropagation() (here) 来缓解这种情况,或者我可以注入框架并然后绑定事件 (here)。但是这两个选项都非常违反直觉——代码当然需要注释以避免看起来像一个错误。

TL;DR:有什么方法可以修改或限定 iframe 以阻止它在注入时触发错误的加载事件?

我尝试过的

    没有src属性 src 设置为 about:blank(上面是隐含的) src 设置为 # src 设置为 javascript:void 0 src 设置为空数据-URI data:text/plain;base64,; srcdoc 设置为空或接近空的字符串

【问题讨论】:

【参考方案1】:

First put the iframe into the document, then register the listener:

var e = $('<iframe>');
e.appendTo('body');
e.on('load', function()
  alert('Loaded!')
);

【讨论】:

这似乎只在 Chrome 中有效。在 Firefox 和 IE11 上,页面加载时会弹出“已加载”警报...

以上是关于如何停止在注入时触发加载事件的空 iframe?的主要内容,如果未能解决你的问题,请参考以下文章

表单加载时停止触发组合框的 selectedIndexChanged 事件

如何在winform窗体加载完以后再执行某个事

将 iframe URL 更改为另一个协议会重新加载页面,但不会在从计时器触发时重新加载

加载和渲染 iframe 及其 CSS 时,如何触发 jQuery 警报?

vue怎么触发元素的原生事件

当我更改其在 DOM 中的位置时,如何停止 iframe 重新加载?