Есть ли стандартный способ определения href, который открывается в вызове document.open?
Дилемма, с которой я сталкиваюсь, заключается в том, что в коде jquery-bbq, потому что IE6 и IE7 не поддерживают hashchange
они загружают страницы дважды, чтобы иметь состояние истории.
Это отрицательно сказывается на том, что код выполняется дважды как на стороне сервера, так и на стороне клиента. Метод, используемый для создания iframe:
if ( is_old_ie ) {
// Create hidden IFRAME at the end of the body.
iframe = $('<iframe src="javascript:0"/>').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 с источником javascript:0
создано. document.open
метод вызывается, и кажется, что он захватывает location.href
родительского окна по умолчанию для страницы, которая открывается .open
,
Я в основном должен изменить код, чтобы он не открывал один и тот же URL-адрес дважды, поэтому я стараюсь переопределить значение по умолчанию и указать такой параметр, как? Iframe = true.
Пример:
http://example.com/views/step-2?one=two
В IE вышеуказанная страница загружается, а затем снова загружается в iframe. Код на стороне сервера выполняется дважды, но я не хочу, чтобы это произошло.
Я хочу добавить &iframe=1
к URI, чтобы я мог предотвратить выполнение моего серверного кода, если iframe
параметр указан.
Две наиболее очевидные вещи:
- Установите src для iframe, но это может иметь отрицательный эффект, и я уверен, что это по какой-то причине.
- Вместо использования
document.open.close
использоватьiframe.location.href
и установите его в href вручную.
Если у кого-то был опыт взлома iframe, я был бы очень признателен за некоторые советы.
РЕДАКТИРОВАТЬ: Еще один обходной путь, о котором я подумал, будет загрузка страницы через iframe / ajax, который устанавливает переменную сеанса до того, как iframe выполнит document.open
, который создает переменную сеанса iframeloading, равную 1, и устанавливает обработчик события загрузки при загрузке iframe, чтобы установить его обратно в 0, и настраивает мой код на стороне сервера, чтобы он не выполнялся, если переменная сеанса установлена в 1. Что-то вроде:
$('<iframe src="/iframe-loading.php"/>').hide().appendTo('body');
document.open().close()
$( document.defaultView ).load(function() {
$('<iframe src="iframe-doneloading.php/>').hide().appendTo('body');
});
1 ответ
О "Есть ли стандартный способ определения href, который открывается в вызове document.open?"
Нет, нет