Iframe跨窗口通信原理详解

Iframe跨窗口通信原理详解

什么是Iframe?

Iframe又被称为内嵌框架,是一种可以将另一个HTML文档嵌入到当前HTML文档的标记。它可以将不同的网页嵌到同一个网页上,使得网页具有嵌套性。

Iframe的跨窗口通信原理

Iframe内部的网页区域和外部的网页区域是完全隔离的,就算是运行在同一个主域名下,它们之间也无法直接通讯。对此,Iframe提供了两种通讯方式:postMessage和window.name

postMessage

// 在父级网页中给Iframe子网页发送一个小序列
var targetOrigin = "http://www.child.com";
var data = {title:"postMessage", message:"Hello, world!"};
window.frames[0].postMessage(data, targetOrigin);

// 在子级网页中接收来自父亲网页的消息
window.onmessage = function(e){
    if (e.origin === "http://www.father.com"){
        console.log(e);
        var data = e.data;
        console.log(data.title);
        console.log(data.message);
    }
}

window.name

// 在父级网页中获取子级网页的数据
var win = window.open("http://www.child.com");
console.log(win); // 输出 Window /_<random-number>

setTimeout(function(){
    console.log(win.name); // 输出子级窗口数据
    win.name = "I'm father!";
}, 2000);

// 在子级网页中获取数据
console.log(window.name); // 输出空字符串
setTimeout(function(){
    window.name = "Hello, child!";
}, 2000);

// 在父级网页中获取子级网页的数据
setTimeout(function(){
    console.log(win.name); // 输出子级网页数据
    win.close(); //关闭子级窗口
}, 4000);

以上是通过window.post方法和window.name属性在Iframe子级网页和父亲网页间的通信。

示例

下面是一个用Iframe实现的简单的购物车示例。我们在主网页中嵌入Iframe,Iframe中的内容是一个商品详情页和加入购物车功能。当用户点击商品详情页中的“加入购物车”按钮时,Iframe中的加入购物车功能会将商品信息传递给主网页,主网页再将商品信息展示在购物车中。

<!-- 父级网页 -->
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>购物车示例</title>
</head>
<body>
    <h1>商品列表</h1>
    <ul>
        <li>
            <h3>商品1</h3>
            <p>价格:10元</p>
            <iframe src="product.html"></iframe>
        </li>
        <li>
            <h3>商品2</h3>
            <p>价格:20元</p>
            <iframe src="product.html"></iframe>
        </li>
        <li>
            <h3>商品3</h3>
            <p>价格:30元</p>
            <iframe src="product.html"></iframe>
        </li>
    </ul>
    <div id="cart">
        <h2>购物车</h2>
        <ul id="cart-list"></ul>
    </div>
    <script>
        window.addEventListener('message', function(e){
            if(e.origin === 'http://localhost:3000'){
                var data = e.data;
                var li = document.createElement('li');
                li.textContent = data.title + ":价格 " + data.price + " 元";
                document.getElementById('cart-list').appendChild(li);
            }
        });
    </script>
</body>
</html>
<!-- 子级网页 -->
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>商品详情页</title>
</head>
<body>
    <h2>商品详情</h2>
    <p>商品的详细信息</p>
    <button onclick="addToCart()">加入购物车</button>
    <script>
        function addToCart(){
            var data = {
                title: "商品1",
                price: 10
            };
            window.parent.postMessage(data, 'http://localhost:3000');
        }
    </script>
</body>
</html>

在这个示例中,主网页通过Iframe加载商品详情网页,当用户点击商品详情页的“加入购物车”按钮时,子级网页通过postMessage方法将商品信息传递给主网页,主网页接收到消息后将商品信息展示在购物车中。

总结

使用Iframe可以实现网页嵌套,并且可以通过postMessage或window.name实现Iframe内部网页和外部网页的通讯,实现跨窗口通信。在实际应用中,可以使用Iframe实现网站的模块化开发,将不同的业务模块拆分为不同的嵌套网页,从而提高网站的可维护性和扩展性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Iframe跨窗口通信原理详解 - Python技术站

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

相关文章

  • javaScript 删除确认实现方法小结

    下面是对“javaScript 删除确认实现方法小结”的详细讲解。 标题 JavaScipt 删除确认实现方法小结 概述 在前端开发过程中,删除操作是一个常见的场景。为了防止误删的情况,我们通常要求用户进行确认。本文将介绍一些实现确认删除的方法。 方法一:使用 confirm 方法 confirm 是 JavaScript 原生提供的方法,它可以弹出一个确认…

    JavaScript 2023年6月11日
    00
  • 详解JavaScript中常用操作符的使用

    详解JavaScript中常用操作符的使用 前言 JavaScript中操作符是用来执行各种计算操作的符号,不同的操作符有不同的用途和优先级。在编写JavaScript程序时,我们需要了解各种操作符的使用方法和规则。本文将详细介绍JavaScript中常用操作符的使用。 算术操作符 算术操作符是用于执行基本的算术计算,如加减乘除等操作。下面是常用的算术操作符…

    JavaScript 2023年5月27日
    00
  • JavaScript中判断函数是new还是()调用的区别说明

    JavaScript中,我们可以通过判断一个函数是通过new关键字调用还是直接使用函数名加括号调用来区分不同的调用方式,从而进行不同的操作。 判断函数是通过new关键字调用还是直接使用函数名加括号调用的步骤如下: 首先,我们需要先了解JavaScript中几个概念:构造函数、原型对象和实例对象。 构造函数:构造函数是用于创建实例对象的函数,在JavaScri…

    JavaScript 2023年6月10日
    00
  • 正则表达式优化JSON字符串的技巧

    下面是关于“正则表达式优化JSON字符串的技巧”的完整攻略。 什么是JSON字符串? JSON是JavaScript对象表示法(JavaScript Object Notation)的简称,是一种轻量级的数据交换格式。JSON数据通过”键-值”(key-value)的方式表示,既易于阅读,也易于编写。在Web开发中,常用JSON字符串来传输数据。 为什么要优…

    JavaScript 2023年5月27日
    00
  • 一文带你掌握axios 工具函数

    一文带你掌握axios 工具函数 概述 Axios 是一个基于 Promise 的 HTTP 请求库,可以用于浏览器和 Node.js。它非常方便、易用,而且具有很高的可定制性。本文将详细介绍 Axios 工具函数。 Axios 工具函数 Axios 中有许多工具函数,下面是其中一些常用的工具函数以及它们的用法: axios.create axios.cre…

    JavaScript 2023年6月11日
    00
  • JavaScript初学者应注意的七个细节小结

    JavaScript初学者应注意的七个细节小结 1. 关于变量 使用关键字var声明变量。没有使用var关键字声明的变量将会自动声明为全局变量,可能会影响其他页面的JavaScript代码。 声明变量时要加上适当的注释,方便自己和其他人阅读代码。 变量名应该简洁明了,便于理解,不要使用拼音或者将多个单词缩写在一起的方式命名变量。 示例: // 不好的示例 v…

    JavaScript 2023年6月10日
    00
  • Javascript 面向对象(一)(共有方法,私有方法,特权方法)

    下面是针对”Javascript 面向对象(一)(共有方法,私有方法,特权方法)”的详细讲解: 什么是面向对象编程? 面向对象编程是一种编程思想,它将数据和操作数据的行为封装在一起,形成一种对象。在面向对象编程中,对象都有自己的状态和行为,对象之间通过调用彼此的方法来进行协作完成任务。 在Javascript中,可以使用对象字面量或者构造函数创建对象。对象字…

    JavaScript 2023年5月27日
    00
  • JavaScript中输出信息的方法(信息确认框-提示输入框-文档流输出)

    JavaScript是一种广泛使用的编程语言,Web开发中使用JavaScript将会发挥重要作用。而输出信息是开发中的一个重要部分,下面将对JavaScript中输出信息的三种方法进行详细讲解: 信息确认框 信息确认框是在需要用户进行确认或者操作之前给予用户的提示窗口。JavaScript提供了一个窗口对象来进行交互,该对象中的confirm方法可以用于生…

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