Возвращаясь к истории iframe, но меняя адрес главного окна - PullRequest
1 голос
/ 19 августа 2010

Я нашел решения для манипулирования всем, кроме того, что мне нужно.Вот сценарий

Так же, как в GMail - основной контент представлен в iframe.Нажатие ссылки на главной странице предназначено для iframe.Это работает хорошо и без проблем.На данный момент, если я нажму «Назад» в браузере - iframe вернется.Это хорошо, потому что кеш задействован и страница не перезагружается.

Добавление общей логики изменения хеша ломает все.Теперь, когда вы наносите ответный удар, браузер изменяет значение has, но НЕ меняет историю iframe.Я попытался получить доступ к истории этого конкретного iframe frames['myiframe'].history.back(), но он все еще меняет хеш без изменения источника iframe.

Я нашел подлый history.replaceState(temp, '', iframelocation), и это работает без проблем при переходе по ссылкам, новозвращаясь назад, он на самом деле пытается загрузить местоположение iframe в главном окне.

Я в растерянности.Я знаю, что GMail не запрашивает всю информацию каждый раз, когда вы отбрасываете назад или вперед.Так как это сделать?Использует ли он несколько iframe и меняет ли он видимый?

Спасибо!

PS Протестировал простую ситуацию: создайте iframe и измените ссылку с помощью некоторого <a href="child" target="iframe">a Теперь измените хешчерез location.href = 'something' Пока все хорошо.Теперь, если вы специально скажете iframe вернуться в историю - он не будет frames['iframe'].contentWindow.history.back()

Ответы [ 3 ]

0 голосов
/ 19 августа 2010

Это не прямой ответ, но может быть полезным, если вы посмотрите на исходный код jQuery BBQ @ http://github.com/cowboy/jquery-bbq/raw/master/jquery.ba-bbq.js

Он переопределяет кнопки «назад» и «вперед» и сохраняет историю в браузере, если это нужно.

0 голосов
/ 15 ноября 2010

Я не нашел способа, чтобы браузер отвечал за использование кэша в истории.

Мое окончательное решение состояло в том, чтобы использовать плагин истории jquery и javascript-хеш-массив объектов div.

var hash; // populated with the value after #
History[hash] = $('<div>').load(hash);

быстрая проверка, если это значение не равно нулю, и замена центра экрана на div. До сих пор работает как талисман, за исключением того, что значение хеш-функции не изменяется, если вы щелкаете по ссылке, которая уже загружена, поэтому обнаружение предполагаемого обновления (нажав на ссылку представления, на котором вы уже находитесь) сложнее.

Удачи!

0 голосов
/ 19 августа 2010

Gmail использует запросы AJAX для заполнения Div Layers, я считаю. Вы должны изучить использование JQuery для динамической загрузки данных. Существует также плагин истории jquery, который позволяет вам плавно двигаться вперед и назад. http://github.com/tkyk/jquery-history-plugin

...