2012-04-13 387 views
1

在jQuery手機中,我正在使用iframe。當您按下後退按鈕(在應用程序或瀏覽器後退按鈕中)時,iframe內容將消失。然後,當您再次按下後退按鈕時,應用程序將切換到上一頁。爲什麼會將iframe的歷史記錄添加到歷史記錄中

iFrame正在添加到歷史記錄中。我認爲這是從未發生過的。

A jsFiddle已經創建,它以儘可能簡單的形式說明了難題。

其中你會發現一個HTML片段,它創建了兩個jQuery Mobile頁面。在第一頁上有一個鏈接可以轉到第二頁。在第二頁上,有兩個後退按鈕(一個在標題上,一個在頁面上作爲按鈕)以及一個用於重新加載的按鈕。重現問題:

  • 從第1頁按照鏈接到2
  • 頁第2頁上,單擊按鈕加載
  • 單擊後面的按鈕

你會注意到你做不是回到第1頁。

這是HTML:

<div data-role="page"> 
    <p>This is page 1</p> <a href="#page2">Go to page 2</a> 
</div> 

<div data-role="page" id="page2"> 
    <div data-role="header" data-add-back-btn="true"> 
     <h1>Page 2</h1> 
    </div> 
    <p>This is page 2</p> 
    <p>What follows is the iFrame</p> 
    <iframe id="i1" width="500" src="http://www.ibm.com"></iframe> 
    <p>This button issues a programmatic back</p> 
    <button id="backButton">Go Back</button> 
    <p>This button loads new content into the iframe</p> 
    <button id="reloadButton">Reload iFrame</button> 
</div> 

這裏是JavaScript

$(function() { 
    $("#backButton").click(function() { 
     jQuery.mobile.back(); 
    }); 
    $("#reloadButton").click(function() { 
     $("#i1").attr("src", "http://www.microsoft.com?x=" + Math.random()); 
    }); 
}); 

(這是你在的jsfiddle找到的代碼)。

+0

它看起來像這個謎題已經存在了一段時間...另請參閱:https://issues.apache.org/jira/browse/CB-265這裏是另一個有用的鏈接http://khaidoan.wikidot。 COM/IFRAME和瀏覽器的歷史 – Kolban 2014-11-01 22:15:01

回答

0

我猜這是因爲JQM以編程方式用replaceState操作歷史。您可以閱讀更多關於他們如何在ajax環境中跟蹤歷史的信息docs

請給我看一些代碼或fiddle,我可能會給你一個更詳細的答案。這似乎工作

0

一個答案(到目前爲止)是試圖通過改變其src屬性,而是重新加載,將一個全新的元素來取代一個是以前在那裏。邏輯來實現這一可能如下:

$("#frameLocation").html('<iframe id="i1" width="500" src=' + newURL + '"></iframe>'); 

相應jsFiddle顯示它的工作是可用的。

這已經在Chrome 38.0和Internet Explorer 11.0上測試過。