我在網上搜索了很多以擺脫這個問題,但無法找到具體的解決方案,儘管以前詳細討論過該問題。IFrame後退按鈕
查詢很簡單。我的JavaScript動態地在網頁上添加一個Iframe(顯示一個反饋表單)。問題在於,「回答後」,現在當用戶單擊瀏覽器的後退按鈕時,iframe而不是瀏覽器窗口受到影響,即問卷再次顯示。我希望瀏覽器後退按鈕正常運行。
這種行爲真的很煩人,而且我很難解決這個問題。
我正在使用firefox。
期待回覆。請告知我是否應該提供更多詳情。
感謝,
我在網上搜索了很多以擺脫這個問題,但無法找到具體的解決方案,儘管以前詳細討論過該問題。IFrame後退按鈕
查詢很簡單。我的JavaScript動態地在網頁上添加一個Iframe(顯示一個反饋表單)。問題在於,「回答後」,現在當用戶單擊瀏覽器的後退按鈕時,iframe而不是瀏覽器窗口受到影響,即問卷再次顯示。我希望瀏覽器後退按鈕正常運行。
這種行爲真的很煩人,而且我很難解決這個問題。
我正在使用firefox。
期待回覆。請告知我是否應該提供更多詳情。
感謝,
在窗體中有一個提交按鈕,這帖子的頁面到服務器。無論您是否使用iframe,後退按鈕將始終將用戶發送回表單。理想的方式是通知用戶已完成的動作,在這種情況下,感謝用戶提供反饋(使用警告框),並將用戶重定向到主頁或在頁面中提供一個按鈕「回到家」。
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中動態加載的初始表單。
我遇到同樣的問題:我使用的是動態創建的iframe來顯示我的網頁上「彈」,其SRC指向得到了一個形式和一個提交按鈕,另一頁。提交該頁面後,使用JS回調來隱藏iframe。正如你所解釋的,這會導致一個新的條目被添加到歷史記錄中(至少在IE上)。
但我發現從DOM中刪除iframe元素(而不是隱藏它)導致不需要的歷史記錄被刪除(在IE9上測試)!在這種情況下用戶期望的是什麼。
您可以在此自己在IE9觀察:
也測試過在IE8和Firefox 10上工作。 –
我碰到過這個問題,並且爲了更細化這個答案,我發現如果我沒有指定iframe的src,直到加載父頁面之後,奇怪的後面行爲不會發生。 –
同意這一點,任何更改回的這種行爲會相當混淆用戶。 –
我將提供更多的上下文:腳本是在公共領域網站上工作的擴展的一部分。我已經有一個「返回上一頁」鏈接,但我仍然希望後退按鈕的功能,因爲我在我的文章中寫道。我不知何故想從瀏覽器歷史記錄中分離或刪除Iframe歷史記錄,但我不確定我能否做到這一點? – VJune
您可以這樣做的唯一方法是使用AJAX將表單值發佈到服務器。通過這種方式,您可以避免發佈帖子,並且後退按鈕可以將您帶到上一頁。但是這涉及到大量的JavaScript編碼來將數據發佈到服務器,然後在獲得有效響應後隱藏表單域。使用jQuery for Ajax可以讓你更輕鬆一些。但是我懷疑你是否可以刪除瀏覽器歷史記錄。 – Arun