2

我经常使用window.postMessage和“消息”事件侦听器在父网页与其子IFRAME元素中的网页之间跨域进行通信。我想知道 UIWebView 及其子IFRAME元素中的网页是否可以做到这一点。

4

1 回答 1

4

是的,这确实是可能的。几天前,我在自己的应用程序中对此进行了测试,并且成功了。

在我想与之通信的网页上,我只是在窗口中添加了一个“消息”事件侦听器

监听网页上的 UIWebView 消息

window.addEventListener("message", onmessage, false);
window.onmessage = function(e){
    // e.data contains message
    // e.origin will equal NULL as theres no domain in UIWebView    
}

UIWebView 只需要抓取嵌入的 iFrame 对象的窗口并在其上调用 postMessage:

iFrameObject.contentWindow.postMessage("message", http://webpageDomain...);

反过来,UIWebView 中的 html 实现也需要像上面的代码一样监听消息。这次 e.origin 将是网页的域。

网页只需要以 * 作为 targetDomain 调用以下内容,因为 UIWebView 不会有。

parent.postMessage("message", *);
于 2012-08-03T21:10:54.240 回答