2011-02-28 67 views
7

我在網上搜索了很多以擺脫這個問題,但無法找到具體的解決方案,儘管以前詳細討論過該問題。IFrame後退按鈕

查詢很簡單。我的JavaScript動態地在網頁上添加一個Iframe(顯示一個反饋表單)。問題在於,「回答後」,現在當用戶單擊瀏覽器的後退按鈕時,iframe而不是瀏覽器窗口受到影響,即問卷再次顯示。我希望瀏覽器後退按鈕正常運行。

這種行爲真的很煩人,而且我很難解決這個問題。

我正在使用firefox。

期待回覆。請告知我是否應該提供更多詳情。

感謝,

回答

3

在窗體中有一個提交按鈕,這帖子的頁面到服務器。無論您是否使用iframe,後退按鈕將始終將用戶發送回表單。理想的方式是通知用戶已完成的動作,在這種情況下,感謝用戶提供反饋(使用警告框),並將用戶重定向到主頁或在頁面中提供一個按鈕「回到家」。

+0

同意這一點,任何更改回的這種行爲會相當混淆用戶。 –

+0

我將提供更多的上下文:腳本是在公共領域網站上工作的擴展的一部分。我已經有一個「返回上一頁」鏈接,但我仍然希望後退按鈕的功能,因爲我在我的文章中寫道。我不知何故想從瀏覽器歷史記錄中分離或刪除Iframe歷史記錄,但我不確定我能否做到這一點? – VJune

+0

您可以這樣做的唯一方法是使用AJAX將表單值發佈到服務器。通過這種方式,您可以避免發佈帖子,並且後退按鈕可以將您帶到上一頁。但是這涉及到大量的JavaScript編碼來將數據發佈到服務器,然後在獲得有效響應後隱藏表單域。使用jQuery for Ajax可以讓你更輕鬆一些。但是我懷疑你是否可以刪除瀏覽器歷史記錄。 – Arun

3

Firefox和IE確實像你提到的,而Chrome不這樣做,我猜其他WebKit瀏覽器會做同樣的。 在Chrome中,單擊後退按鈕會將您帶到您想要去的位置(前一個父框架的URL)。即Chrome在後退按鈕歷史記錄中不添加iframe網址更改。

不幸的是,我發現沒有辦法強制IE和FF來複制這個,所以我使用了Arun上面建議的AJAX post方法。

這裏是我的iframe的來源,使用jQuery發佈形式,並與POST的結果替換整個頁面:

<form method="post" onsubmit="postForm(this);return false"> 
    ... 
</form> 

<script type="text/javascript"> 
function postForm(form) { 
    $.post(form.action, $(form).serialize(), postCompleted); 
} 
function postCompleted(data) { 
    $('html').html(data); 
} 
</script> 

這適用於所有的瀏覽器;點擊返回按鈕會將您返回到最終用戶看到的前一個URL,而不是在iframe中動態加載的初始表單。

3

我遇到同樣的問題:我使用的是動態創建的iframe來顯示我的網頁上「彈」,其SRC指向得到了一個形式和一個提交按鈕,另一頁。提交該頁面後,使用JS回調來隱藏iframe。正如你所解釋的,這會導致一個新的條目被添加到歷史記錄中(至少在IE上)。

但我發現從DOM中刪除iframe元素(而不是隱藏它)導致不需要的歷史記錄被刪除(在IE9上測試)!在這種情況下用戶期望的是什麼。

您可以在此自己在IE9觀察:

  1. 打開返回按鈕菜單(右鍵單擊後退按鈕):你只需要在當前頁面
  2. 按在iframe提交一個條目= >後退按鈕菜單顯示的iframe
  3. 從DOM中刪除的iframe一個額外名額=>後退按鈕菜單不再顯示該條目
+0

也測試過在IE8和Firefox 10上工作。 –

+0

我碰到過這個問題,並且爲了更細化這個答案,我發現如果我沒有指定iframe的src,直到加載父頁面之後,奇怪的後面行爲不會發生。 –