javascript addEventListener & quot; сообщение & quot; иногда не принимается через окна браузера

Я использую messsage событие для общения между окнами браузера. Главное окно отправляет сообщение в iframe, а iframe передает сообщение родителю. Пост всегда работает. php echos возвращает сообщение, используя следующее:

echo "<script>document.write(parent.postMessage(" . json_encode($status) . ", '*'))</script>";

Иногда сообщение получено, а иногда нет. Я уверен, что сообщение отправляется, так как я могу записать сообщение о состоянии, отправленное после echo "<script>..., Что может быть причиной проблемы?

Упрощенный JavaScript:

// posts login info to an iframe which logs user in
postToIframe(path, parameters, "post");

// wait for server's response
var foundMessage = false;
var messageFn = function (e) {
if (typeof e.data.status !== "undefined"){
_jsonStatus = e.data.status;
foundMessage = true;
}
window.removeEventListener("message", messageFn);
messageFn = undefined;
if (!foundMessage){
_jsonStatus = "Unknown Message: " + v(e.data);
}
};
window.addEventListener("message", messageFn, false);
var timer = new Date().getTime();
var interval = setInterval(function() {
var timer2 = new Date().getTime();
var done = true;
var message;
if (_jsonStatus.indexOf('Error') === 0){
message = _jsonStatus;
console.log(message);
done = true;
} else if (timer2 - timer > 5000){
message = 'Timeout: Failed to get report data'
console.log(message);
if (_this.status){
_this.status(message, "red");
}
done = true;
if (typeof messageFn !== undefined){
window.removeEventListener("message", messageFn);
}
} else if (_jsonStatus.substr(0, 7) == "Success"){
done = true;
} else {
// continue to wait
done = false;
}
if (done == true){
clearInterval(interval);
}
}, 1000)

Упрощенный PHP:

if ($userid > 0){
$status['status'] = "Success. You are logged in.";
} else {
$status['status'] = 'Error: Login Failed';
}

echo "<script>document.write(parent.postMessage(" . json_encode($status) . ", '*'))</script>";

1

Решение

Задача ещё не решена.

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]