JQuery - 当外页没有改变时,从iframe捕获页面加载和卸载

时间:2015-08-12 00:07:28

标签: jquery iframe

我正在使用外部菜单的网站上工作,内部内容位于iframe中。在一个新的iframe上,我想在页面完全加载时运行一些代码来更改父页面标题(使用$(window.parent).load)。但是,编写框架的方式,当您在菜单中导航到新的"页面时,#34;主页面不会重新加载 - 它只是更改iframe内容。

所以:当我直接进入新页面时,标题集会起作用。如果我在另一个页面上然后导航到新页面,则标题不会被设置。如果我然后重新加载页面,它确实。因此,我假设当iframe在没有重新加载的情况下进行更改时,没有信号表明在完成新iframe时父进程已完成,因此"加载"从不触发。

我确实需要在整个页面加载完成后运行代码 - 但是当iframe完成加载时它还不够运行,因为外部页面在iframe完成加载后设置标题,并覆盖我的变化。

有没有办法强制我在iframe中的代码是最后运行的东西,无论外页是否重新加载?

另一半是我在这个iframe中做的另一件事是隐藏父元素。这很好,但是当我离开时,我需要元素回来。而且,如果父母没有重新加载,那么该元素将保持隐藏状态。我希望我可以取消卸载,但就像上面的负载一样,如果外页没有重新加载,卸载代码似乎不会触发。

1 个答案:

答案 0 :(得分:0)

听起来像是在泡菜中。 首先,我将假设两个URL(父级和子级)都位于同一个域中 - 否则您将打开自己的其他蠕虫病毒。

如果他们确实驻留在同一个域上......那么: 无论如何,您无法收听父页面的load事件。所以不要打扰那个兔子洞。

相反,您要做的是使用window.postMessage。这使您可以有效地在两个帧之间进行通信。

在您的父级中,在加载iframe之前设置您的侦听器。

window.addEventListener("message", function (ev) {
  if (ev.origin !== "http://my-website.org") return;
  console.log("message is", ev.data)
  document.title = ev.data
}, false)

并在iframe的脚本中:

window.postMessage("yo there", "http://my-website.org")

试验一下,希望你能按照你需要的方式解决问题。 Here is also a good tutorial就可以了。