iframe子页面与父页面在同域或不同域下的js通信

yizhihongxing

对于iframe子页面与父页面通信,需要注意同域或不同域等情况。

同域下的js通信

当子页面和父页面在同一个域名下时,js通信可以通过window.parent对象来进行。以下是一个简单的示例。

父页面代码:

<!DOCTYPE html>
<html>
<head>
    <title>父页面</title>
</head>
<body>
    <h1>我是父页面</h1>
    <div id="content"></div>
    <script>
        window.onload = function() {
            var iframe = document.createElement('iframe');
            iframe.src = 'iframe.html';
            document.body.appendChild(iframe);

            window.addEventListener('message', function(e) {
                console.log('父页面接收到:' + e.data);
                document.getElementById('content').innerHTML = e.data;
            });
        }
    </script>
</body>
</html>

子页面代码:

<!DOCTYPE html>
<html>
<head>
    <title>子页面</title>
</head>
<body>
    <h1>我是子页面</h1>
    <button onclick="sendMsg()">发送消息到父页面</button>

    <script>
        function sendMsg() {
            window.parent.postMessage('这是子页面发来的消息', '*');
        }
    </script>
</body>
</html>

子页面中通过window.parent.postMessage方法发送消息到父页面。父页面中通过window.addEventListener方法监听message事件,并在事件处理程序中接收子页面的消息进行处理,此处将子页面传来的消息插入到页面中的content的div元素中。

不同域下的js通信

当子页面和父页面的域名不同时,js通信需要通过跨域postMessage方式来实现。以下是一个简单的示例。

父页面代码:

<!DOCTYPE html>
<html>
<head>
    <title>父页面</title>
</head>
<body>
    <h1>我是父页面</h1>
    <div id="content"></div>
    <script>
        window.onload = function() {
            var iframe = document.createElement('iframe');
            iframe.src = 'http://127.0.0.1:8888/iframe.html';
            document.body.appendChild(iframe);

            window.addEventListener('message', function(e) {
                console.log('父页面接收到:' + e.data);
                document.getElementById('content').innerHTML = e.data;
            });
        }
    </script>
</body>
</html>

子页面代码:

<!DOCTYPE html>
<html>
<head>
    <title>子页面</title>
</head>
<body>
    <h1>我是子页面</h1>
    <button onclick="sendMsg()">发送消息到父页面</button>

    <script>
        function sendMsg() {
            window.parent.postMessage('这是子页面发来的消息', 'http://127.0.0.1:8888');
        }
    </script>
</body>
</html>

子页面中同样是通过window.parent.postMessage方法发送消息到父页面,只不过这里需要指定父页面的域名。父页面中同样在iframe中嵌入子页面,然后通过window.addEventListener方法监听message事件,在事件处理程序中接收子页面的消息进行处理。

需要注意的是,父页面中的iframe src属性需要指定完整的子页面地址,例如:http://127.0.0.1:8888/iframe.html;而子页面中的发送消息时指定的域名也需要指定完整,例如:http://127.0.0.1:8888。

以上是iframe子页面与父页面在同域或不同域下的js通信的完整攻略。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:iframe子页面与父页面在同域或不同域下的js通信 - Python技术站

(0)
上一篇 2023年6月11日
下一篇 2023年6月11日

相关文章

  • XHTML下,JS浮动代码失效的问题

    XHTML是HTML的一种更加严格的版本,需要符合更为严格的规范,语法上更为规范化。JS浮动代码在XHTML下失效,主要是因为XHTML不允许使用空标签来代替一些书写不完整的标签,如img、input等。因此,浮动代码在XHTML下需要进行一些特殊处理。 以下是两个解决XHTML下JS浮动失效问题的示例: 1.将浮动元素封装在一个div中 <!DOCT…

    JavaScript 2023年6月11日
    00
  • 原生js实现俄罗斯方块

    实现俄罗斯方块的主要步骤包括: 构建游戏区域 定义游戏区域中的方格,并对应各种俄罗斯方块形状 编写方块的移动、旋转等控制逻辑 判断游戏胜负,进行游戏结束逻辑的编写 下面分别介绍这些步骤的具体实现过程。 1. 构建游戏区域 俄罗斯方块游戏区域是一个长方形,可以使用 html 的 div 标签进行构建。首先在 html 中添加类名为 game-container…

    JavaScript 2023年6月10日
    00
  • JavaScript调用客户端的可执行文件(示例代码)

    在JavaScript中可以使用一些特殊的API来操作客户端的可执行文件,这些API被称作Web API。其中有一个重要的API就是利用浏览器的插件对象来运行客户端的可执行文件。下面给出基于Chrome浏览器和IE浏览器的实现方式。 Chrome浏览器操作客户端的可执行文件 1. 首先需要编写一个简单的插件 插件的主要功能就是用于连接客户端与浏览器,使得浏览…

    JavaScript 2023年5月27日
    00
  • 使用 JS 复制页面内容的三种方案

    下面是使用 JS 复制页面内容的三种方案的完整攻略: 一、使用 document.execCommand() 方法 1. 步骤 将待复制的内容放到一个元素中,例如一个 div 标签,在这里我们以一个具有 class 为 “copy-content” 的 div 块为例。 html<div class=”copy-content”> <p&g…

    JavaScript 2023年6月11日
    00
  • 基于JavaScript实现文件共享型网站

    下面将详细讲解“基于JavaScript实现文件共享型网站”的完整攻略。 前置条件 熟悉HTML、CSS和JavaScript基本知识; 熟悉Node.js开发环境和相关模块。 操作步骤 1. 创建文件夹 首先在本地文件夹中创建一个新的文件夹,命名为“file-sharing-website”。 2. 初始化项目 打开终端,进入到该文件夹中,执行以下命令: …

    JavaScript 2023年5月27日
    00
  • 基于Javascript实现返回顶部按钮

    下面是“基于JavaScript实现返回顶部按钮”的完整攻略。 一、先了解什么是返回顶部按钮 返回顶部按钮是指网站页面上的一个链接按钮,当网页向下滚动一定程度时,点击该按钮可以使网页返回顶部。返回顶部按钮可以方便用户快速返回到网页的最顶部,提高用户使用网站的体验度。 二、实现方法 1. 设置html结构和CSS样式 在页面的合适位置增加一个“返回顶部”按钮的…

    JavaScript 2023年6月11日
    00
  • JavaScript中eval和with语句如何影响作用域链的深度探索

    让我详细讲解一下“JavaScript中eval和with语句如何影响作用域链的深度探索”。 什么是作用域链 在深入探索eval和with语句影响作用域链之前,我们需要了解一下什么是作用域链。 作用域链是JavaScript中的一个重要概念,它是一种链式结构,用于描述变量和函数的可见性和访问性。当我们访问一个变量或函数时,JavaScript引擎首先在当前作…

    JavaScript 2023年6月11日
    00
  • JavaScript性能优化之函数节流(throttle)与函数去抖(debounce)

    JavaScript性能优化之函数节流与函数去抖 函数节流(throttle)和函数去抖(debounce)都是 JavaScript 中常用的性能优化技巧。它们都是用来解决频繁触发回调函数导致过多计算使页面出现卡顿或资源浪费的问题。 函数节流 throttle 函数节流的基本思路是:在一定时间间隔内,只执行一次函数。通过这种方式,可以减少计算次数,提升性能…

    JavaScript 2023年5月27日
    00
合作推广
合作推广
分享本页
返回顶部