Window.parent.postMesasge确认问题

时间:2016-12-23 14:02:09

标签: javascript javascript-events addeventlistener

我正在使用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:超出最大调用堆栈大小

1 个答案:

答案 0 :(得分:0)

我按照@Shilly的建议做了,并且它按预期工作。我将以下代码行改为使用

我更改了这行代码

interval =   window.setInterval(SendMessage(Record, count, false), 100) 

 window.setTimeout(SendMessage(Record, count, false), 200);