从多个方面理解iframe传值

一、vue中的iframe传值

在vue的框架中,如果需要把一个页面嵌套到另一个页面中,可以使用iframe标签。一般情况下,如果需要把一些数据从子页面传到父页面,可以使用iframe的contentWindow属性,然后在子页面中通过postMessage函数向父页面发送消息,从而实现数据传递。

// 父页面

<iframe src="child.html" id="frame" width="100%" height="600" frameborder="0"></iframe>

    window.addEventListener('message', function (event) {
      console.log(event.data)
    }, false);

   var iframe = document.getElementById("frame");
   iframe.contentWindow.postMessage("hello world", "*");


// 子页面


    window.addEventListener('message', function (event) {
      console.log(event.data)
    }, false);

    window.parent.postMessage("hello world", "*");


在父页面中,可以通过添加监听函数,监听子页面发来的消息,然后进行相应的处理。同样,在子页面中也可以添加监听函数,监听父页面发来的消息。

二、iframe传值的依赖

在使用iframe传值的过程中,可能会涉及到一些依赖。常用的依赖包括postMessage、easyXDM、window.name、hashchange等。

其中,postMessage是比较常用的一种依赖方式,在上述vue中已经有所涉及。而easyXDM则是一个更为高级的跨域解决方案,它支持所有现代浏览器,并且支持IE6+。

而window.name则是一种比较特殊的方式,它可以通过在父页面中设置window.name的值,然后在子页面中获取这个值,来实现数据传递。而hashchange则是通过监听URL的hash部分的变化来实现数据传递。

三、iframe传值到父页面

当需要在iframe中传值到父页面中时,可以使用postMessage函数。具体实现可以参照上方vue中的例子。在父页面中,可以监听子页面发来的消息,并进行相应的处理。

在一些特殊情况下,可能需要在iframe中传递一个对象,这时可以采用JSON.stringify函数和JSON.parse函数来完成数据的序列化和反序列化。

// 父页面

  window.addEventListener('message', function (event) {
    console.log(event.data)
  }, false);

// 子页面

  window.parent.postMessage(JSON.stringify({name: '小明', age: 18}), '*');

四、iframe传值给父页面

当需要在父页面中获取iframe中的值时,可以使用contentWindow属性来获取iframe的window对象,从而访问iframe中的数据。


<iframe src="child.html" id="frame" width="100%" height="600" frameborder="0"></iframe>

    var iframe = document.getElementById('frame');
    console.log(iframe.contentWindow.document.body.innerHTML);


以上代码中,通过获取iframe的window对象,进而获取子页面中的body内的HTML文本。同样,也可以获取其他页面元素的值,并进行相应的处理。需要注意的是,由于跨域的限制,有些情况下获取iframe中的值可能会受到限制。

五、layui中的iframe传值

在layui的框架中,可以使用iframe标签将一个页面嵌入到主页面中。在iframe页面中,可以通过父页面中的layui.admin.popup.qxuiframe函数向父页面发送消息。

// 父页面

layui.use(['admin'], function(){
    var admin = layui.admin;
    admin.popup.qxuiframe({
      id: 'iframe',
      area: ['800px', '550px'],
      url: 'child.html'
    });
});

// 子页面

parent.layui.admin.events.iframe('hello', 'world');

在父页面中,通过引入layui库之后,可以获取到admin对象,并使用它里面的popup.qxuiframe函数来打开一个iframe弹窗。

而在子页面中,则需要先获取到父页面的window对象,再通过它里面的layui.admin.events.iframe函数来向父页面发送消息。消息中可以包括任何需要传递的数据。

六、iframe怎么相互传递参数

在嵌套的iframe页面中,如果需要相互传递参数,可以使用postMessage函数。具体实现方式与vue中类似,不再赘述。

如果iframe页面之间需要建立链接,可以通过设置URL参数来完成。例如,在链接中添加“#”后,可以在URL中添加一些参数来完成数据传递。


<iframe src="child.html#name=小明&age=18" id="frame" width="100%" height="600" frameborder="0"></iframe>

在子页面中,可以通过访问location.hash来获取父页面传递的数据。


console.log(location.hash.substring(1)); // 输出 "name=小明&age=18"

七、iframe之间的相互传值

在两个iframe页面之间实现数据传递时,一般需要在父页面中进行协调。父页面可以在监听到一个iframe发送消息之后,再转发这个消息给另一个iframe。实现的具体实现方式与vue中大致相同,不再赘述。

需要注意的是,在实现跨域的iframe传值时,需要考虑到安全性问题。因此,应该采用安全性较高的postMessage函数作为主要的传值方式,避免出现安全漏洞。

原创文章,作者:小蓝,如若转载,请注明出处:https://www.506064.com/n/152879.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
小蓝小蓝
上一篇 2024-11-13 06:07
下一篇 2024-11-13 06:08

相关推荐

  • 为什么Python不能编译?——从多个方面浅析原因和解决方法

    Python作为很多开发人员、数据科学家和计算机学习者的首选编程语言之一,受到了广泛关注和应用。但与之伴随的问题之一是Python不能编译,这给基于编译的开发和部署方式带来不少麻烦…

    编程 2025-04-29
  • Java判断字符串是否存在多个

    本文将从以下几个方面详细阐述如何使用Java判断一个字符串中是否存在多个指定字符: 一、字符串遍历 字符串是Java编程中非常重要的一种数据类型。要判断字符串中是否存在多个指定字符…

    编程 2025-04-29
  • Python合并多个相同表头文件

    对于需要合并多个相同表头文件的情况,我们可以使用Python来实现快速的合并。 一、读取CSV文件 使用Python中的csv库读取CSV文件。 import csv with o…

    编程 2025-04-29
  • 从多个方面用法介绍yes,but let me review and configure level of access

    yes,but let me review and configure level of access是指在授权过程中,需要进行确认和配置级别控制的全能编程开发工程师。 一、授权确…

    编程 2025-04-29
  • 从多个方面zmjui

    zmjui是一个轻量级的前端UI框架,它实现了丰富的UI组件和实用的JS插件,让前端开发更加快速和高效。本文将从多个方面对zmjui做详细阐述,帮助读者深入了解zmjui,以便更好…

    编程 2025-04-28
  • 学Python用什么编辑器?——从多个方面评估各种Python编辑器

    选择一个适合自己的 Python 编辑器并不容易。除了我们开发的应用程序类型、我们面临的软件架构以及我们的编码技能之外,选择编辑器可能也是我们编写代码时最重要的决定之一。随着许多不…

    编程 2025-04-28
  • 使用easypoi创建多个动态表头

    本文将详细介绍如何使用easypoi创建多个动态表头,让表格更加灵活和具有可读性。 一、创建单个动态表头 easypoi是一个基于POI操作Excel的Java框架,支持通过注解的…

    编程 2025-04-28
  • 创建列表的多个方面

    本文将从多个方面对创建列表进行详细阐述。 一、列表基本概念 列表是一种数据结构,其中元素以线性方式组织,并且具有特殊的序列位置。该位置可以通过索引或一些其他方式进行访问。在编程中,…

    编程 2025-04-28
  • Python多个sheet表合并用法介绍

    本文将从多个方面对Python多个sheet表合并进行详细的阐述。 一、xlrd与xlwt模块的基础知识 xlrd与xlwt是Python中处理Excel文件的重要模块。xlrd模…

    编程 2025-04-27
  • 从多个角度用法介绍lower down

    lower down是一个常用于编程开发中的操作。它可以对某个值或变量进行降低精度的处理,非常适合于一些需要精度不高但速度快的场景。那么,在本文中,我们将从多个角度解析lower …

    编程 2025-04-27

发表回复

登录后才能评论