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

对于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日

相关文章

  • JS的Form表单转JSON格式的操作代码

    JS的Form表单转JSON格式的操作代码可以通过以下步骤实现: 获取表单元素 使用document.querySelector()方法获取到表单元素对象。例如: const form = document.querySelector(‘#myForm’); 遍历表单元素 使用forEach()方法遍历表单元素的所有表单控件,并将其转换为JSON格式。例如:…

    JavaScript 2023年5月27日
    00
  • javascript 语法基础 想学习js的朋友可以看看

    下面是详细的讲解。 1. 前言 JavaScript是一种弱类型的解释性脚本语言,广泛应用于Web前端开发。它具有灵活的语法和强大的能力,可以实现网页的交互效果和数据处理等操作。想要深入学习JavaScript,首先需要了解JavaScript的基础语法,包括变量、运算符、控制流语句、函数、对象、数组等内容。 2. 变量与数据类型 JavaScript中的变…

    JavaScript 2023年5月18日
    00
  • JS封装cavans多种滤镜组件

    JS封装Cavans多种滤镜组件攻略 在本攻略中,我们将讲解如何通过JavaScript来实现对Cavans多种滤镜的封装。主要囊括了以下内容: 需求分析 功能实现 示例代码 需求分析 我们需要实现一个Cavans滤镜的组件,具有以下功能: 支持黑白滤镜效果 支持模糊滤镜效果 支持浮雕滤镜效果 支持自定义滤镜效果 功能实现 1. 创建Canvas对象 var…

    JavaScript 2023年6月10日
    00
  • Vue项目history模式下微信分享爬坑总结

    「Vue项目history模式下微信分享爬坑总结」这篇攻略主要是在Vue项目开发中,针对微信分享的一些问题和解决方案进行总结,并重点介绍了在使用history模式下遇到的问题和解决方法,下面是详细的攻略: 1. 什么是Vue项目history模式下的微信分享? 在Vue的路由模式下,有两种路由方式:hash和history。history模式利用了HTML5…

    JavaScript 2023年6月11日
    00
  • jQuery Ajax 全局调用封装实例代码详解

    jQuery Ajax全局调用封装实例代码详解 在前端开发中,Ajax作为异步通信技术已经得到了广泛的应用。而通过jQuery库封装的Ajax则在开发中变得更加方便,让我们更加容易地处理数据请求和响应。本文将会详细介绍如何将jQuery的Ajax进行全局封装调用,以及如何实现Ajax的参数传递和数据处理。 前置知识 在进行本文讲解前,需要了解一些JavaSc…

    JavaScript 2023年6月11日
    00
  • Vue nextTick延迟回调获取更新后DOM机制详解

    当 Vue.js 更新数据时,除了更新数据对象本身,Vue.js 还需要通过 Virtual DOM 进行一系列操作,最终更新真实的 DOM 构造,以反映数据的变化。这个过程需要一定的时间,而且这个过程还不保证在同步代码中立即执行完成。因此,我们可能会在同步代码中尝试获取更新后的 DOM,但却发现 DOM 还没有更新。 在这种情况下,我们可以使用 Vue.n…

    JavaScript 2023年6月11日
    00
  • Javascript基础教程之数据类型 (字符串 String)

    Javascript基础教程之数据类型(字符串 String) 什么是字符串? 在JavaScript中,字符串是由任何字符组成的一组字符。字符串可以是字母、数字、标点符号等,甚至可以包含空格或其他特殊字符。字符串是JavaScript中最常用的数据类型之一。 JavaScript中的字符串是Unicode字符集中的16位编码单元序列。这意味着每个字符都是由…

    JavaScript 2023年5月28日
    00
  • js 数组详细操作方法及解析合集

    JS 数组详细操作方法及解析合集 什么是数组? 在JavaScript中,数组是一种存储多个值的有序集合。数组中的每个值称为一个元素,每个元素都有一个相应的数字键(称为索引)来标识其在数组中的位置。 创建数组 在JavaScript中,有多种方式来创建数组。下面是一些示例: 使用数组字面量 数组字面量是用方括号 [] 包围并由逗号分隔构成的值序列,如下所示:…

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