在Iframe的我的aspx页面上,我正在显示来自不同服务器的网页。当用户在IFRAME中显示的网站上进行一些设置我的应用超时是因为Iframe之外的不活动。如果用户在Iframe网站上积极做某事,我该如何避免这种情况? (我希望仅在用户在iframe中积极做某事时才避免超时)
感谢
答案 0 :(得分:0)
这是一个艰难的,但我有一个有效的解决方案。它被称为“跨域脚本”,您应该谷歌这一点获取更多信息。我在将广告整合到SocialNetwork.com时使用了这种方法,因为javascript和广告来自不同的域名。无论如何,这种技术可以在这里应用来解决你的问题。
当您在iFrame中时,您可以使用JavaScript与父框架进行通信。你做的是,在iFrame中使用javascript在你的网址末尾添加一个#,如下所示:
myurlformyiframe.com/mypage/#nonce00000001
然后当iFrame中发生某些事情时,将该URL更改为其他内容,例如: myurlformyiframe.com/mypage/#nonce00000002
使用javascript更改散列(#)后的URL时,不会导致页面刷新。
那么您所做的就是在父窗口中,您将一个javascript事件挂钩到iframe,以便在iframe中的URL更改时通知您。每当发生这种情况时,请对您要保护会话的服务器执行ajax回发(我建议使用jquery)。
这样,iframe中发生的活动可以触发主/外框对服务器的命中,以保留会话。
这是一个很棒的库,可以很容易地在iFrame和父窗口之间传递消息: http://benalman.com/code/projects/jquery-postmessage/docs/files/jquery-ba-postmessage-js.html
使用jquery插件,您可以在外部页面中创建这样的脚本: $ .receiveMessage( function(e){ procResp(spanID,e.data); }, 'myurlformyiframe.com/mypage/' );
还有一个$ .postMessage函数进入iFrame。所以你调用post message函数并在你的触发器事件,点击,计时器等任何事情发生在iframe内时发送ANYTHING。这会导致procResp在页面的外部被触发,这是iFrame的父级,它可以对服务器进行ajax命中以保留会话。
当通过更改URL之后收到“消息”时,数据将被e.data传递到procResp javascript函数中。
答案 1 :(得分:0)
我有类似的情况。我正在使用IFrame打开支付网关网址,直到付款完成(发送付款请求并获得相同的确认号码)我无法对我的应用做任何事情。 但在这种情况下,我已经为iframe网址设置了30秒的超时值,如果我没有从第三方服务获得任何响应,我将其显示为超时。在这种情况下,我的应用程序不会挂起,因为30秒是一个相当短的时间。 不确定你的问题是否类似。如果是,您可以尝试在iframe中激活网址的阈值限制。