JQuery—当外部页面不可用时,从iframe捕获页面加载和卸载';不变
我在一个网站上工作,它有一个外部菜单,内部内容在一个iframe中。在我正在制作的一个新iframe上,我想运行一些代码,在页面完全加载完成时更改父页面标题(使用$(window.parent.load)。但是,按照框架的编写方式,当您通过菜单导航到一个新的“页面”时,主页不会重新加载—它只会更改iframe内容 所以:当我直接进入新页面时,标题集就起作用了。如果我在另一个页面上,然后导航到新页面,则不会设置标题。如果我然后重新加载页面,它会这样做。因此,我假设在没有重新加载的情况下更改iframe时,没有信号表明新iframe完成时父级已完成,因此“加载”永远不会触发 我确实需要在整个页面加载完成时运行该代码,但是-仅在iframe加载完成时运行是不够的,因为外部页面在iframe加载完成后设置标题,并覆盖我的更改 有没有办法强制我在iframe中的代码最后运行,不管外部页面是否被重新加载JQuery—当外部页面不可用时,从iframe捕获页面加载和卸载';不变,jquery,iframe,Jquery,Iframe,我在一个网站上工作,它有一个外部菜单,内部内容在一个iframe中。在我正在制作的一个新iframe上,我想运行一些代码,在页面完全加载完成时更改父页面标题(使用$(window.parent.load)。但是,按照框架的编写方式,当您通过菜单导航到一个新的“页面”时,主页不会重新加载—它只会更改iframe内容 所以:当我直接进入新页面时,标题集就起作用了。如果我在另一个页面上,然后导航到新页面,则不会设置标题。如果我然后重新加载页面,它会这样做。因此,我假设在没有重新加载的情况下更改ifra
另一半是我在iframe中做的另一件事是在父对象上隐藏一个元素。这很好,但是当我离开时,我需要元素返回。同样,如果父元素没有重新加载,那么该元素将保持隐藏状态。我希望我可以在卸载时取消隐藏,但就像上面的加载一样,如果没有重新加载外部页面,卸载代码似乎不会触发。听起来像是陷入了困境。 首先也是最重要的一点,我将假设两个URL(父URL和子URL)都位于同一个域中,否则您将向一整罐蠕虫开放自己 如果它们确实位于同一个域上。。。然后: 无论如何,您都无法侦听父页面的
加载
事件。所以不要费心去兔子洞了
相反,您要做的是使用。这允许您在两个帧之间有效地通信
在父级中,在加载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")
尝试一下,希望你能按照你需要的方式解决问题。在它上面。听起来你好像陷入了困境。 首先也是最重要的一点,我将假设两个URL(父URL和子URL)都位于同一个域中,否则您将向一整罐蠕虫开放自己 如果它们确实位于同一个域上。。。然后: 无论如何,您都无法侦听父页面的
加载
事件。所以不要费心去兔子洞了
相反,您要做的是使用。这允许您在两个帧之间有效地通信
在父级中,在加载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")
尝试一下,希望你能按照你需要的方式解决问题。在它上面。他们在同一个域上,是的。不幸的是,我不确定我是否可以将似乎需要的代码添加到父页面(它是Microsoft CRM,因此我不能直接进入并轻松地进行代码更改…因此需要处理自定义内容的内部iFrame)。我本来以为因为这个原因我不能使用postMessage,但我会进一步证实。他们在同一个域上,是的。不幸的是,我不确定我是否可以将似乎需要的代码添加到父页面(它是Microsoft CRM,因此我不能直接进入并轻松地进行代码更改…因此需要处理自定义内容的内部iFrame)。我原本以为因为这个原因我不能使用postMessage,但我会进一步证实这一点。