Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 访问和修改iframe内容,postMessage vs jQuery.contents()_Javascript_Jquery_Postmessage - Fatal编程技术网

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

Javascript 访问和修改iframe内容,postMessage vs jQuery.contents(),javascript,jquery,postmessage,Javascript,Jquery,Postmessage,这是有可能的 $('#iframe_id').contents().find('.stuff_to_modify).addClass('whatever') 但是也可以使用事件,通过从iframe向脚本发送do_something消息,该脚本在收到消息时进行修改(添加该类) 我想知道我应该走哪条路,以及这两种方法之间的区别(缺点、优点) jQuery方法似乎更好,因为我不再需要在iframe中包含任何脚本了与您给出的jQuery示例的主要区别在于,postMessage支持跨源通信 也就是说,如

这是有可能的

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

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

我想知道我应该走哪条路,以及这两种方法之间的区别(缺点、优点)


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

与您给出的jQuery示例的主要区别在于,postMessage支持跨源通信

也就是说,如果承载iframe的父页面来自域a,而iframe的内容来自域B,那么postMessage允许您进行通信,而jQuery方法将导致安全错误

您提供的链接是指向浏览器的window.postMessage实现的java脚本包装,对于不支持该链接的浏览器,它会返回到窗口位置哈希轮询。链接中列出了其他好处


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

与您给出的jQuery示例的主要区别在于,postMessage支持跨来源通信

也就是说,如果承载iframe的父页面来自域a,而iframe的内容来自域B,那么postMessage允许您进行通信,而jQuery方法将导致安全错误

您提供的链接是指向浏览器的window.postMessage实现的java脚本包装,对于不支持该链接的浏览器,它会返回到窗口位置哈希轮询。链接中列出了其他好处


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

如果我是您,我必须使用jqueryIf我是您,我必须使用jquerywhat如果父文档有https而iframe没有,它还能工作吗?@Alex协议、端口和主机应该相同,以处理来自同一域的两个页面。因此,如果一个是http,另一个是https,则可能必须使用window.postMessage,因为它被视为跨源。我建议您也测试这个场景。如果父文档有https,而iframe没有,它还会工作吗?@Alex协议、端口和主机应该相同,以处理来自同一域的两个页面。因此,如果一个是http,另一个是https,则可能必须使用window.postMessage,因为它被视为跨源。我建议您也测试这个场景。