2012-04-13 2 views
1

В jQuery mobile я использую iframe. Когда вы нажимаете кнопку «Назад» (в приложении или в кнопке браузера), содержимое iframe исчезает. Затем, когда вы снова нажимаете кнопку «Назад», приложение переходит на предыдущую страницу.Почему история iframe добавляется в историю

iFrame добавляется в историю. Я думал, что этого никогда не должно было случиться.

A jsFiddle был создан, что иллюстрирует головоломку как можно более простую форму.

В нем вы найдете фрагмент HTML, который создает две мобильные страницы jQuery. На первой странице есть ссылка для перехода на вторую страницу. На второй странице есть две кнопки назад (одна на заголовке и одна как кнопка на странице), а также кнопку для перезагрузки . Для того, чтобы воссоздать проблему:

  • Из страницы 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. ком/IFrame-и-браузер история – Kolban

ответ

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.

Смежные вопросы