每当重新加载iframe时需要回调

Need callback whenever iframe gets reloaded

本文关键字:iframe 回调 加载 新加载      更新时间:2023-09-26

这类似于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