访问和修改iframe内容,postMessage vs jQuery.contents()

时间:2012-06-11 11:07:11

标签: javascript jquery postmessage

可以使用

$('#iframe_id').contents().find('.stuff_to_modify).addClass('whatever');

但是也可以使用window.postMessage事件,通过从iframe向脚本发送do_something消息,iframe在收到消息时进行修改(添加该类)。

我想知道我应该采用哪种方式,以及这两种方法之间的区别(缺点,优点)。

jQuery方法似乎更好,因为我不再需要在iframe中包含任何脚本

1 个答案:

答案 0 :(得分:2)

您提供的window.postMessage和jQuery示例之间的主要区别在于,postMessage支持跨源通信。

意思是,如果托管iframe的父页面来自域A,而iframe的内容来自域B,则postMessage允许您进行通信,而jQuery方法将导致安全性错误。

您提供的链接是浏览器的window.postMessage实现的java脚本包装器,并且回退到不支持它的浏览器的窗口位置哈希轮询。其他好处列在您的链接中。

因此,如果两个页面来自同一个源,即从同一个域提供,那么您可以使用jQuery方法本身。如果它来自两个不同的来源,您可能必须使用JS包装器。