这边帖子中的简书文章无法访问,这边在网上查找了下面的方法可以参考下,您也可以自己查找一下。
当iframe的内外页面不在同一个域时,由于浏览器的同源策略(Same-Origin Policy),它们之间的JavaScript对象无法直接互相访问和调用。这是为了安全起见,防止恶意脚本对其他域的页面进行未经授权的操作。 为了实现iframe内外通信,我们可以使用postMessage方法。这个方法允许跨源的iframe、窗口、标签页等之间安全地传递消息。 下面是一个简单的示例,演示了如何使用postMessage在iframe内外进行通信: 父窗口代码: - <!DOCTYPE html>
- <html>
- <head>
- <title>Parent Window</title>
- <script>
- function sendMessageToIframe() {
- var iframe = document.getElementById('myIframe');
- iframe.contentWindow.postMessage('Hello from parent window!', '*');
- }
- </script>
- </head>
- <body>
- <button onclick="sendMessageToIframe()">Send Message to Iframe</button>
- <iframe id="myIframe" src="http://example.com/child.html" style="height: 200px; width: 300px;"></iframe>
- </body>
- </html>
复制代码子窗口代码(iframe内的页面): - <!DOCTYPE html>
- <html>
- <head>
- <title>Child Window</title>
- <script>
- window.addEventListener('message', function(event) {
- if (event.origin !== 'http://yourdomain.com') return; // 确保消息来自可信的源
- if (event.data === 'Hello from parent window!') {
- // 处理接收到的消息
- console.log('Received message from parent window:', event.data);
- }
- }, false);
- </script>
- </head>
- <body>
- <h1>This is the child window</h1>
- </body>
- </html>
复制代码在这个示例中,父窗口中的按钮点击事件会触发sendMessageToIframe函数,该函数使用postMessage方法向iframe发送消息。iframe内的页面通过监听message事件,接收并处理来自父窗口的消息。需要注意的是,在子窗口中我们需要检查消息的来源,以确保它来自可信的源,以防止恶意脚本的攻击。
|