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日

相关文章

  • 详解javascript函数写法大全

    详解JavaScript函数写法大全是一篇包含了众多 JavaScript 函数使用和写法范例的文档,让开发人员能够更好地理解和运用 JavaScript 函数。下面我将分为四个部分详细讲解这篇攻略。 一、函数声明和函数表达式 JavaScript 中函数的写法主要分为函数声明和函数表达式两种方式。 函数声明 使用 function 关键字定义的函数叫函数声…

    JavaScript 2023年5月17日
    00
  • javascript的数组方法大全

    JavaScript的数组方法大全 JavaScript中的数组是一种非常强大和常用的数据结构,可以存储任何类型的数据,并且提供了很多方便的数组方法来操作数组。在本篇文章中,我们将介绍JavaScript的所有数组方法,并提供示例说明用法。 push()方法 push()方法将一个或多个元素添加到数组的末尾。 let fruits = [‘apple’, ‘…

    JavaScript 2023年5月18日
    00
  • 详解使用JWT实现单点登录(完全跨域方案)

    下面我将使用Markdown的格式为您详细讲解使用JWT实现单点登录(完全跨域方案)的完整攻略。 什么是JWT JWT(JSON Web Token)是一种用于验证身份的技术,它可以根据一定的规则生成一个加密的Token,这个Token中包含了用户的一些身份信息,如用户ID、用户名、邮箱、角色等,这些信息可以被访问验证时进行验证。 通常情况下,JWT会在用户…

    JavaScript 2023年5月19日
    00
  • Python实现的爬取百度文库功能示例

    下面我将为您详细讲解“Python实现的爬取百度文库功能示例”的完整攻略。 简介 百度文库是百度公司提供的一个文档在线分享平台。用户可以在该平台上发布并分享自己的文档,也可以在平台上查找和下载其他用户分享的文档。本文将介绍如何使用Python实现爬取百度文库的功能。 环境配置 使用Python进行爬取的前提是需要配置好相关的环境。配置步骤如下: 安装Pyth…

    JavaScript 2023年5月28日
    00
  • JavaScript Accessor实现说明

    JavaScript Accessor是一种用于获取或设置对象属性值的方法,这种方式可以让我们在获取或设置对象属性时执行额外的逻辑。 Accessor方法有两种:getter和setter。 Getter方法可以让我们获取对象的属性值,Setter方法可以让我们设置对象的属性值。 以下是实现JavaScript Accessor方法的步骤: 步骤1:定义一个…

    JavaScript 2023年6月10日
    00
  • 超棒的跨浏览器纯CSS动画实现 Animate.css使用方法

    针对您提到的主题“超棒的跨浏览器纯CSS动画实现 Animate.css使用方法”的详细讲解和攻略,我将会从以下几个方面进行讲解: Animate.css简介 Animate.css安装方法 Animate.css应用方法 Animate.css 示例说明 1. Animate.css简介 Animate.css是一个包含了多种跨浏览器动画的CSS3库,作者…

    JavaScript 2023年6月11日
    00
  • javascript 拖动_cookie_ajax等

    JavaScript 是一门非常强大的编程语言,可以支持前端页面的实时交互。其中,拖动、cookie 和 Ajax 是 JavaScript 最为常用的功能之一。下面将详细讲解这些内容的完整攻略。 JavaScript 拖动 通过 JavaScript,可以实现网页元素的拖动效果。具体实现方式如下: 首先,通过 JavaScript 获取需要拖动的元素。 l…

    JavaScript 2023年6月10日
    00
  • JS获取对象属性API汇总枚举symbol

    下面我将详细讲解“JS获取对象属性API汇总枚举symbol”的完整攻略,主要分成以下几个部分: 一、前言 在JS中,获取对象属性是非常常见的操作。而JS提供了很多方法来获取对象的属性,不同的方法适用于不同的场景。本篇文章将会围绕着JS获取对象属性的API进行梳理,并着重讲解其中一个比较新颖的方法——枚举symbol类型的属性。 二、API汇总 下面我们来总…

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