2011-07-07 66 views
1

在iframe中的aspx頁面上顯示來自不同服務器的網頁。當用戶在IFRAME中顯示的網站上進行一些設置時,我的應用超時因爲Iframe之外的活動不活躍。如果用戶在Iframe網站上主動做某些事情,我該如何避免這種情況? (我想避免超時僅當用戶正在做一些積極提供iframe)會話超時Iframe

感謝

+1

有一個小的JavaScript「心跳」腳本按固定的時間表對您的服務器進行ping操作,以保持會話的活躍。 –

回答

0

那是一個艱難的,但我有一個可行的解決方案。它被稱爲「跨域腳本」,你應該谷歌瞭解更多信息。在將廣告整合到SocialNetwork.com中時,我使用了這種方法,因爲javascript和廣告來自不同的域名。無論如何,這個技巧可以在這裏應用來解決你的問題。

當您在iFrame中時,您可以使用JavaScript與父框架進行通信。你要做的,是讓JavaScript的在iFrame中添加#你的URL像這樣的結尾:

myurlformyiframe.com/mypage/#nonce00000001

然後當東西在發生的iFrame,該URL更改爲否則如: myurlformyiframe.com/mypage/#nonce00000002

當您使用javascript在散列(#)後更改URL時,它不會導致頁面刷新。

然後,您在父窗口中執行的操作是,將iframe事件掛鉤到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。所以,只要你的觸發事件,點擊,定時器發生在那個iframe中,你就會調用post消息函數併發送ANYING。這會導致procResp在頁面的外部被觸發,這是iFrame的父項,它可以使ajax命中您的服務器以保留會話。

當通過更改URL後收到「消息」時,數據將被e.data傳遞到您的procResp javascript函數中。

+0

我忘了提及一件事,我張貼表單到不同的URL和窗體的目標是Iframe,所以我不直接指定Iframe的SRC屬性。你的解決方案在這種情況下工作嗎? – user228777

+0

你的評論還不清楚 - 你不能發佈到一個iframe,你必須發佈到一個URL。請以更具體的方式解釋或包含更多詳細信息的鏈接。我懷疑,我描述的方法會幫助你。你應該閱讀並嘗試它! – DavidJBerman

+0

我在貼子上點擊下面的表單,窗體的目標是一個IFRAME(表單的回覆顯示,這是另一個網站)

'method =「 「input type =」hidden「name =」編碼「name =」frmSSO「target ='iframe1'>
user228777

0

我有類似的情況。我正在使用IFrame打開支付網關的網址,直到付款完成(發送支付請求並獲取確認號碼)我無法對我的應用程序執行任何操作。 但在這種情況下,我爲30秒的iframe url設置了一個超時值,如果我沒有收到來自第三方服務的任何響應,則將其顯示爲超時值。在這種情況下,我的應用程序不掛斷,因爲30secs時間相當短。 不確定你的問題是否類似。如果是的話,您可以嘗試在iframe處於活動狀態時對url的閾值限制。

+0

沒有我的情況有點不同 - 我在Iframe中打開另一個網站,在那裏他將進行電話註冊,並且他可以在該網站上從0分鐘到他註冊的任何分鐘。我的應用程序超時10分鐘後,如果它不起作用。我不知道如何在我的情況下做到這一點? – user228777