我正在使用外部菜单的网站上工作,内部内容位于iframe中。在一个新的iframe上,我想在页面完全加载时运行一些代码来更改父页面标题(使用$(window.parent).load)。但是,编写框架的方式,当您在菜单中导航到新的"页面时,#34;主页面不会重新加载 - 它只是更改iframe内容。
所以:当我直接进入新页面时,标题集会起作用。如果我在另一个页面上然后导航到新页面,则标题不会被设置。如果我然后重新加载页面,它确实。因此,我假设当iframe在没有重新加载的情况下进行更改时,没有信号表明在完成新iframe时父进程已完成,因此"加载"从不触发。
我确实需要在整个页面加载完成后运行代码 - 但是当iframe完成加载时它还不够运行,因为外部页面在iframe完成加载后设置标题,并覆盖我的变化。
有没有办法强制我在iframe中的代码是最后运行的东西,无论外页是否重新加载?
另一半是我在这个iframe中做的另一件事是隐藏父元素。这很好,但是当我离开时,我需要元素回来。而且,如果父母没有重新加载,那么该元素将保持隐藏状态。我希望我可以取消卸载,但就像上面的负载一样,如果外页没有重新加载,卸载代码似乎不会触发。
答案 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就可以了。