【问题标题】:iframe onload in IE7/8 with Javascript在 IE7/8 中使用 Javascript 加载 iframe
【发布时间】:2011-06-23 14:35:15
【问题描述】:

我有一个 iframe 加载到父页面中。 iframe 包含一系列表单,我想在每次重新加载 iframe 内容时(即在 iframe 内容中提交表单后)对父页面执行操作。当前代码位于父页面上,适用于除 IE 之外的所有大玩家(我只关心 IE 7 和 8)。

var iframe = document.getElementById('theiframe');
function refresh( ) {
  alert('foo');
}
if (iframe.attachEvent) iframe.attachEvent('onload', refresh);
else iframe.onload = refresh;

我错过了什么会阻止它在 IE 中有效?

【问题讨论】:

  • 尝试引用 iframe 的文档: var iframe = document.getElementById('theiframe').document; (不是答案,因为我猜:))

标签: javascript internet-explorer iframe onload


【解决方案1】:

替换:

iframe.onload = refresh

与:

iframe.attachEvent('load', refresh, false); 


为了消除任何混淆:
var iframe = document.getElementById('theiframe');
function refresh( ) {
  alert('foo');
}

if (iframe.attachEvent) iframe.attachEvent('onload', refresh);
else iframe.addEventListener('load', refresh, false)

【讨论】:

  • loadonload有区别吗?
  • IE调用事件onload,而其他浏览器必须调用它。
  • 我确实在结尾之前添加了一个else if (iframe.addEventListener) ... 子句。好电话!
  • 我发现 IE 更喜欢:iframe.attachEvent("onload", refresh);
  • @SamWatkins,这种情况包含在 if 语句中。如果 attachEvent 被定义,它会使用它。
【解决方案2】:

完成提交后,您可以通过调用parent.refresh()iframe 调用它。

【讨论】:

  • 虽然我最终可以同时控制父级和 iframe,但以任何方式修改 iframe 都非常困难。
  • 好的,但有时onload 事件会触发,而所有工作并未在iframe 中完成。我发现在 iframe 中添加“我完成了”命令对于所有浏览器都更可靠。
  • 在这种情况下,iframe 内容(资源、DOM 等)是否已完成加载并不重要,重要的是“用户已开始查看新页面”。不过很好。
  • 这个解决方案在 IE 11 中对我不起作用。父页面不受影响。
  • @Mic,我的动机是向今天通过谷歌搜索到达这里的人们提供信息。他们可能会寻找解决当前问题的方法;从 5 年前开始不是问题。重申一下,不是人身攻击,只是为一些人节省了一些时间。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-25
  • 1970-01-01
  • 2012-09-27
  • 1970-01-01
  • 2010-10-28
  • 1970-01-01
相关资源
最近更新 更多