Дилемма, с которой я столкнулся, заключается в том, что в коде jquery-bbq , поскольку IE6 и IE7 не поддерживают hashchange
, они загружать страницы дважды, чтобы иметь состояние истории.
Это имеет негативный эффект, потому что код выполняется дважды как на стороне сервера, так и на стороне клиента. Для создания iframe используется следующий метод:
if ( is_old_ie ) {
// Create hidden IFRAME at the end of the body.
iframe = $('').hide().appendTo( 'body' )[0].contentWindow;
// Get history by looking at the hidden IFRAME's location.hash.
get_history = function() {
return get_fragment( iframe.document.location.href );
};
// Set a new history item by opening and then closing the IFRAME
// document, *then* setting its location.hash.
set_history = function( hash, history_hash ) {
if ( hash !== history_hash ) {
var doc = iframe.document;
doc.open().close();
doc.location.hash = '#' + hash;
}
};
// Set initial history.
set_history( get_fragment() );
}
Создается пустой iframe с src javascript: 0
. Вызывается метод document.open
, и кажется, что он захватывает location.href
родительского окна по умолчанию для страницы, которая открывается с .open
].
Мне в основном нужно изменить код, чтобы он не открывал один и тот же URL дважды, поэтому я хочу изменить значение по умолчанию и указать такой параметр, как? Iframe = true.
Пример:
http://example.com/views/step-2?one=two
В IE указанная выше страница загружается, а затем снова загружается в iframe. Код на стороне сервера выполняет дважды , но я не хочу, чтобы это произошло.
Я хочу добавить & iframe = 1
к URI, чтобы я мог предотвратить мой сервер побочный код не запускается, если указан параметр iframe
.
Две наиболее очевидные вещи:
document.open.close
используйте iframe.location.href
и вручную установите его в href. Если у кого-то есть имел опыт взлома iframe, я был бы очень признателен за несколько советов.
РЕДАКТИРОВАТЬ : Другой обходной путь, о котором я подумал, - это загрузка страницы через iframe / ajax, которая устанавливает переменную сеанса до того, как iframe выполнит документ .open
, который создает переменную сеанса iframeloading, равную 1, и устанавливает обработчик события загрузки для загрузки iframe, чтобы вернуть его в 0, и настраивает мой код на стороне сервера, чтобы он не выполнялся, если ses sion var установлена в 1. Примерно так:
$('').hide().appendTo('body');
document.open().close()
$( document.defaultView ).load(function() {
$('