Поведение свойства top.document.location.href в IE (8/9) - PullRequest
1 голос
/ 03 ноября 2011

У меня есть кусок кода, который работает неожиданным для меня образом.Позвольте мне сначала изложить детали, чтобы код выглядел примерно так:

window.onunload = doUnload;
var unLoadTimer;
var gInvokeOnBeforeUnload = true;
function setInvokeOnBeforeUnload() { gInvokeOnBeforeUnload = false; }

function doUnload() {
if(gInvokeOnBeforeUnload==true){
    setInvokeOnBeforeUnload();
    top.document.location.href = "LogOff";
    clearTimeout(unLoadTimer); 
}
//Function Midpoint
if (top.document.readyState != "complete" && gLogOffClick == false){
    unLoadTimer = setTimeout("doRealUnload("+func_call_count+")", 800); 
    //its just a timeout for the function to be called again
}
}

Как я также добавил ведение журнала, но для того, чтобы код был небольшим, исключенным из примеров.Проблема, с которой я столкнулся, заключалась в том, что top.document.location.href НЕ переназначается на «LogOff» и по-прежнему совпадает с самой первой стартовой страницей, которую я открыл на сайте, назовите ее «LogIn».Чтобы вызвать событие window.onunload, я нажимаю F5 (и это происходит постоянно), но выход из системы не назначен для location.href.Только если в маркер комментария "// Function Midpoint" я добавляю простой alert(1);, тогда происходит выход из системы (как видно из журналов apapche ниже), однако местоположение href остается таким же, как было - "LogIn".Я не прав, предполагая, что он должен измениться, как только ему будет присвоено значение?

И поэтому я не могу понять пару моментов: а) Почему location.href не изменяется, как только я присваиваю ему значение LOGOFF.б) Что должно произойти, как только LOCATION.HREF будет изменен в) Как инициализируется LOCATION.HREF при открытии браузера и входе в систему

Нет каких-либо необычных механизмов отслеживания сеансов, это прямая HTML-страница свыше JS вызвал @ onunload через F5.

Все, чего я хочу достичь, - это понять, что происходит за кулисами и почему происходит перенаправление, если есть предупреждение (1);между и нет, если нет перерыва там.В моем случае Apache зарегистрировал следующее:

With timeout:
IP.IP.IP.IP - xxx [28/Oct/2011:10:38:50] "GET /LogOff HTTP/1.1" 200 208
IP.IP.IP.IP - xxx [28/Oct/2011:10:38:50] "GET /LogIn HTTP/1.1" 401 540
IP.IP.IP.IP - xxx [28/Oct/2011:10:38:52] "GET /LogIn HTTP/1.1" 200 2898

Without timeout:
IP.IP.IP.IP - xxx [28/Oct/2011:10:41:04] "GET /LogIn HTTP/1.1" 200 2726

Любая помощь или руководство в отношении того, что читать / где искать, ценится, даже лучше, если кто-то сможет прояснить, что происходит за кулисами.Боюсь, я не очень хорошо разбираюсь в двигателях JS, к моему разочарованию.Код также не совсем мой :( Если у вас есть дополнительный вопрос, который я слушаю, возможно, я пропустил что-то важное там:)

Не пытался тестировать в других браузерах, так как IE - единственная фокус-группа, которая мне нужна ...

1 Ответ

0 голосов
/ 03 ноября 2011

document.location.href только для чтения при выгрузке страницы.Следовательно, вы не можете изменять это свойство, когда пользователь хочет покинуть страницу.Это «функция» безопасности.

См. Также: Изменение window.location.href в Firefox в ответ на событие onunload

Я предлагаю вместо этого сделать асинхронныйвызов сервера, выход пользователя из системы и т. д. Это можно сделать с помощью Ajax-вызова, что довольно просто с помощью jQuery.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...