每当重新加载iframe时需要回调
Need callback whenever iframe gets reloaded
这类似于IFRAME加载完成时的Javascript回调?,但不同的是,我使用了一个我们正在使用的基于web的应用程序,为了对它进行一些监控,我把它放在了一个iframe中,这样我的javascript就可以查看网页了。
因此,当用户使用应用程序时,它会加载新页面,但它们都在iframe中,不会重新加载。
是否有某种方式的事件会在页面加载到此iframe中时通知我,或者至少在页面被替换时通知我?
没有这样的事件。我唯一的想法是让计时器运行(window.SetInterval()
),定期检查iframe的位置(URL)与上次检查相比是否发生了变化。
只是另一个想法:iframe的内容是在你的控制之下,还是在查看其他域的内容?如果是你的,你当然可以把事件放在代码中,比如"onbeforeunload
",如果iframe被重定向,它会通知你。
您可以控制那些在iframe中加载的页面吗?如果是这样的话,那么你可以在所有这些文件中添加一个只做这件事的js文件:
parent.loaded(document.location.href);
然后在主页中,你有iframe的地方有这个:
function loaded(url) {
alert('"' + url + '" was loaded');
}
要做到这一点,您还需要为iframe中与主页面来自同一域的所有页面提供服务。
编辑
由于您从与主域相同的域提供iframe页面,因此您需要控制为页面提供服务的服务器,因此即使您不能修改代码,也可以在服务器返回内容时在"运行时"对其进行修改。例如,您可以返回一个js文件的修改版本,该文件总是加载类似于parent.loaded(document.location.href)。
这看起来可能比使用setTimeout更复杂,但这是另一种解决方案。
由于您有权访问dom,您可以做的另一件事是注册onunload事件,这样当您确信页面将被重新加载时,您就可以使用setTimeout,这将防止continue-none-stating计时器。
话虽如此,也许这不是实施这种监控的最佳方式?也许你可以用浏览器扩展来实现这一点?有权了解所有文件位置变化的人员。
另一个编辑
您可能想尝试将此onload事件用于iframes
- AngularJS:我可以跳过函数参数回调吗
- 要求未定义JS回调参数
- MeteorJS:在带有回调的vzaar api上正确使用wrapAsync
- 自引用回调
- 测试Angular Service解决错误回调中的promise
- 如何将一个JavaScript函数回调为多个函数
- JavaScript回调函数
- 用于回调的javascript参数
- 将json回调数据转换为日期
- 承诺在非节点式回调上使用Bluebird
- FancyBox退出IFRAME回调
- Iframe 加载回调被多次调用
- 在带有数据的iframe中的JSONP中没有回调
- iFrame 中的 cordova 回调
- 每当重新加载iframe时需要回调
- 如何避免ASP.NET主页中的iframe回调
- 隐藏iframe chrome回调未触发
- 加载iframe后,回调函数不运行
- 当使用回调函数时,JavaScript如何从不再在DOM中的iframe访问元素?
- IFRAME加载完成时的Javascript回调