我正在使用window.parent.postMessage与客户端进行通信。目前客户端一次只能处理1条记录。我必须向他们发送1条记录,等待回复,再发送一条记录。永远不会发送第二个顺序,因为我的标志始终是null事件,尽管它是在事件监听器中设置的。
这是我的发送消息方法:
var SendMessage = function (Record, count, readyForNextRecord) {
if (Record.length > 0) {
var response = sessionStorage.getItem("response");;
if (readyForNextRecord === true) {
var url = (window.location != window.parent.location) ? document.referrer : document.location;
window.parent.postMessage(Record[count], url);
count++;
}
if(count < Record.length){
if (response == null) {
interval = window.setInterval(SendMessage(Record, count, false), 100)
} else {
response = null;
clearInterval(interval);
window.setTimeout(SendMessage(Record, count, true), 100);
}
}
}
事件监听器
window.addEventListener("message", ReceiveMessage, false);
var ReceiveMessage = function (event) {
for (var val in event.data) {
var message = event.data[val];
switch (message.toString().toLowerCase()) {
case "success":
sessionStorage.setItem("response", true);
break;
case "failure":
sessionStorage.setItem("response", false);
break;
default:
break;
}
}
}
最后,我达到了最大调用堆栈大小。 未捕获RangeError:超出最大调用堆栈大小
答案 0 :(得分:0)
我按照@Shilly的建议做了,并且它按预期工作。我将以下代码行改为使用
我更改了这行代码
interval = window.setInterval(SendMessage(Record, count, false), 100)
要
window.setTimeout(SendMessage(Record, count, false), 200);