2013-07-25 153 views
0

我有一个隐藏的框架,表示已接受的消息,但我不必通过单击发送。我正在调用执行和操作的函数,包括发送消息。函数settimeout不满足它们的速度。发送到框架的消息

this.request = function (requestData) { 
    $(function() { 
     dataOrign = requestData; 
     var iframe = $('iframe#postFrame'); 
     setTimeout(function() { 
      var parseData = JSON.stringify(requestData); 
      iframe[0].contentWindow.postMessage({ request: parseData }, '*'); 
     }, 1000); 
    }); 
}; 

我怎样才能发送postMessage最短的时间?在这个情况下?

+0

通过在IE8(&我认为9)中,window.postMessage不允许发布对象,只有字符串。 – quekshuy

回答

0

对于大多数浏览器,您可以监听该iframe执行postMessage的load事件(某些示例发现here)。

E.g.

$('iframe#postFrame').on('load', function(e) { 
    // do postMessage here 
}); 

但是,似乎setTimeout/setInterval方法是旧式浏览器(IE7/8)不可避免的。

UPDATE

如果你想将它写成一个函数,你可以这样做:

var request = function(requestData, $iframe) { 
    if ($iframe.length > 0 && $iframe.get(0).document.readyState === 'completed') { 
     // do postMessage 
    } 
}; 

然后,你可以使用这种方式:

request(data, $('iframe#postFrame')); 
+0

首先发送它很好。但我多次使用我的功能。欲了解更多信息:我有任务,以取代postMessage –

+0

类似工作的Ajax请求看到更新的答案。 – quekshuy