我的页面上有一个iframe,用于将表单提交给第三方页面。一旦第三方完成计算,它就会重定向回我自己的网站。我想检测iframe何时返回我自己的网站。
我目前的做法是使用超时并每隔0.5秒检查一次iframe的location.host
。但是,虽然iframe仍然在第三方网站上,但我得到一个JS错误,我想避免。
有没有一种很好的方法可以找出iframe的位置何时返回我自己的服务器而不会出现JS错误?
答案 0 :(得分:3)
function check() {
try {
location.host; // if I error, doStuff() is never hit.
doStuff();
} catch( e ) {
setTimeout(check, 5000);
}
}
使用try / catch语句可以为您解决此问题。可能还有其他方法可以解决这个问题,但在审核了您的问题后,这是第一个想到的问题。
另一种方法是从iframe中侦听onload
事件。每次iframe页面更改时都会触发(至少在chrome中)。 http://jsfiddle.net/rlemon/DwVJX/1/这是一个快速演示。在iframe中单击jsFiddle徽标返回主页。我明白这并不能告诉你,如果你是在正确的域上,但与try / catch结合使用,这就消除了对计时器的需求。
答案 1 :(得分:2)
您可以将支票包裹在try catch
块中。或者,您可以让主持人“呼叫”父母的页面。 (类似于parent.notifyReady()
)这样就可以避免使用setInterval
您可以根据是否使用document.referrer
属性
所以在你的第三页上,你可能会有这样的事情:
if(document.referrer.indexOf('otherdomain.com') != -1) {
// script called via otherdomain.com
parent.notifyReady();
}
答案 2 :(得分:0)
我认为您目前正在做的是可靠地检测iframe是否在您父网页域上托管的网页上的唯一方法。
大多数iframe属性都是不可访问的(访问时抛出异常),而iframe位于与父级不同的域上。异常实际上表明iframe不在您的站点上,因此只需捕获异常并再试一次。如果没有抛出异常,则iframe位于与其父级位于同一域中的页面上。