iframe的跨域通信(代码示例)

2023-05-16

在前端开发中,我们经常会使用iframe来嵌套其他网页或者同域的页面。但是,如果iframe中嵌套的页面和当前页面不属于同源,那么就无法直接进行通信。为了解决这个问题,我们可以使用以下几种方式来实现跨域通信:

  1. 使用postMessage方法在iframe中可以通过postMessage方法向父页面发送消息,而在父页面中可以通过监听message事件来接收消息。通过这种方式,我们就可以在不同源的页面之间进行通信。在iframe中:

window.parent.postMessage('message', 'http://parent-domain.com');

在父页面中:

 window.addEventListener('message', function(event) {
  if (event.origin === 'http://iframe-domain.com') {
    var message = event.data;
    // 处理消息
  }
});
  1. 使用location.hash方式在iframe中可以通过修改location.hash来向父页面传递数据,而在父页面中可以通过监听hashchange事件来获取到这个值。在iframe中:

javascriptCopy codewindow.parent.location.hash = 'message';

在父页面中:

javascriptCopy codewindow.addEventListener('hashchange', function() {
  var hash = window.location.hash;
  // 处理消息
});
  1. 使用window.name方式在iframe中可以通过修改window.name来向父页面传递数据,而在父页面中可以通过访问iframe的contentWindow.name来获取到这个值。在iframe中:

javascriptCopy codewindow.name = 'message';

在父页面中:

javascriptCopy codevar iframe = document.getElementById('iframe-id');
var message = iframe.contentWindow.name;
// 处理消息
  1. 使用window.postMessage + window.addEventListener("message", handler, false)方法这种方式类似于第一种方法,只是在父页面中需要使用一个事件处理函数来接收消息。在iframe中:

window.parent.postMessage('message', 'http://parent-domain.com');

在父页面中:

javascriptCopy codewindow.addEventListener('message', function(event) {
  if (event.origin === 'http://iframe-domain.com') {
    var message = event.data;
    // 处理消息
  }
}, false);

无论使用哪种方式,都需要注意一些安全问题,比如验证消息的来源和内容,避免跨站脚本攻击等。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

iframe的跨域通信(代码示例) 的相关文章

  • 使用 Jquery 的模态 PDF IFRAME

    这是我的脚本 运行完美 没有问题 现在为什么我将其发布在这里 主要是为了我可以增强它并使其变得更好 我也认为这可以帮助其他人 JQUERY 这是一个工作示例http jsfiddle net cornelas 4eUgf 2 http js
  • 我可以为 jQuery 提供默认的“上下文”吗?

    背景 jQuery 选择器调用的第二个 上下文 参数 例如 jQuery selector context 可以为选择器引擎提供一个下降的起点 如果您需要控制 IFRAME 同一域中 中的内容 这通常很有用 你只需通过iframe cont
  • 如何从 Youtube 嵌入中删除暂停菜单视频建议/相关视频(类:ytp-pause-overlay)

    当我的嵌入视频暂停时 YouTube 显示带有视频建议的菜单 iframe 中的元素具有类 ytp pause overlay 如何在不删除控件的情况下删除它 如果您使用 Javascript 加载视频YouTube 播放器 iframe
  • X-FRAME-OPTIONS: DENY 通过 nginx 来自 Django 站点在哪里?

    我的 Django 网站使用django summernote https github com summernote django summernote在 iframe 中 并抛出此错误 多个具有冲突值的 X Frame Options
  • `base` 标签导致 iframe 在 Internet Explorer 中作为新窗口打开

    我有一个问题base tag http www w3schools com tags tag base asp仅影响 Internet Explorer 版本 8 9 和 10 以下代码用于在 iframe 中打开动态内容 并且它在 Chr
  • 将“onclick”应用于 iFrame 中的所有元素

    如何使用 JavaScript DOM 来应用onclick事件到链接内部iframe 这是我正在尝试但不起作用的方法 document getElementById myIframe contentDocument getElements
  • 拖动并 connectToSortable 到 iframe 内的可排序 DIV 中

    我试图将一个元素从主页拖动到其中的 iframe 并在框架内使用可排序的 div 我能够使 div 可排序 并将可拖动的内容连接到可排序的内容 但元素放置的位置计算错误并在错误的位置排序 可能是因为iframe内的鼠标坐标与主页的位置不同
  • iframe 中的位置固定 div 不起作用

    我正在开发 facebook iframe 应用程序 我在此应用程序中有一个弹出消息框 那个弹出窗口有固定位置 但它不能像添加到没有滚动的 iframe 中那样工作 如果弹出窗口在没有滚动的 iframe 中 是否可以使其固定在位置 如果弹
  • 在 AngularJS 中使用 iFrame

    Using Angular 1 2 我正在尝试找出一种 有角度 的方式来加载 iFrame 但我在任何地方都找不到任何教程 任何真正的讨论 基本上 我有一个显示链接列表的搜索页面 单击链接应调用控制器中的一个函数 该函数将数据 可能通过 h
  • 有没有办法在网站中嵌入维基百科文章并设置其样式?

    我想做的基本上是一个 div 元素 其中包含维基百科文章的打印友好版本 我使用 iframe 来嵌入文章并且它可以工作 尽管我无法设置文档的样式 我想这是因为 iframe 内容不在我的域中并且我没有编辑权限 有没有办法在加载 iframe
  • 从 iframe 中打开 iframe fancybox,以便它在父级中打开

    我可以让它工作 从 iframe 中打开一个 fancybox IMAGE a href Open something a 我遇到的问题是我需要打开一个 fancybox IFRAME 示例代码或任何想法将不胜感激 Thanks 简单来说
  • IFrame 内容交换错误?

    我有一个包含许多 iframe 的网页 包括第三方 iframe 例如广告感知和各种共享按钮 在 Firefox 中 我注意到这些 iframe 的内容有时会被交换 这样您就会在另一个 iframe 所在的位置看到广告感知广告 iframe
  • 如何使用 jquery 从 iframe 内部滚动?

    我正在使用一个 Shadowbox 它生成一个 iframe 以在页面上显示产品详细信息 由于详细信息页面可能相当长 因此客户端需要一个 更多 按钮来向下滚动页面 显然 iframe 右侧的滚动条还不够 这是我为了让 iframe 滚动而尝
  • Firefox(仅限)动态表单操作不起作用

    控制台为操作属性返回空白 我已经移动了 file upload attr action io cfm action updateitemfile item id agenda modal attr data defaultitemid 周围
  • 未捕获的安全错误:阻止了具有原点的框架...访问具有原点的框架

    我已经为 SAP 解决方案 无论什么 制作了一个组件 该组件通过 iframe 嵌入到报告中 在 SAP 平台 BO 上部署报告后 我收到此错误 在 Chrome 上 但在 IE 或 FF 上也不起作用 Uncaught SecurityE
  • 从第三方网站为 iframe 设置 CSS

    我正在尝试设计风格snapwidget Instagram feed http snapwidget com getstarted 我想让边框变成白色 这不是小部件的设置 所以我尝试添加 css 看来我的 css 没有被检测到 因为内容位于
  • 在iframe中显示本地htm文件?

    我使用 MailBee NET 对象以 htm 格式在本地计算机上保存一些电子邮件 例如 使用服务器上的电子邮件 messageID 为每封电子邮件创建一个单独的文件夹 D 电子邮件 GmailId1380ec660e0e656a doc
  • 在 ionic 2 应用程序中使用 iframe 播放 YouTube 视频

    在 Ionic 2 应用程序中 我尝试使用 iframe 嵌入一个 YouTube 视频 代码如下所示 但是 当我导航到该页面时 我收到此错误 我找不到如何解决这个问题的好答案 XMLHttpRequest 无法加载https google
  • 如何通过iframe从父html传递参数?

    我有一个 html 页面 在其中以编程方式设置 iframe 的 src 如何通过 iframe src 传递参数并在子 html 中获取它们 下面是我的代码 function myFunction myIframe attr src my
  • 将天气 iframe 嵌入到 Shiny Dashboard 中

    我正在尝试将 Forecast io 的天气预报嵌入到闪亮的仪表板中 我最初在使用 符号时遇到了麻烦 但看到一篇文章提供了如何使用特殊字符格式化 HTML 代码的示例 但是 当我运行该应用程序时 我看到一个简单的 未找到 即使我知道该链接有

随机推荐

  • Error: L6218E: Undefined symbol XXXX (referred from main.o)

    学习keil5 问题记录 报错Error L6218E Undefined symbol XXXX referred from main o 是因为没有在User里添加需要的 c文件 在此处添加写好的文件 C 右击User点击Add Exu
  • Debian/Ubuntu 系统环境配置

    目录 一 Debian下使用Vi方向键变字母的解决办法二 Debian打开locales中文编码支持三 Debian 安装中文输入法四 Debian 超强vim配置文件简易安装方法 xff1a 自己手动安装 xff1a 其它VIM配置参考链
  • Ubuntu 20.04 安装配置 及 ZYNQMP开发环境搭建

    Ubuntu 20 04 安装配置 及 ZYNQMP开发环境搭建 一 磁盘文件选单个文件二 安装界面显示不全三 安装类型四 VMware tools安装失败五 更换软件源五 安装开发环境六 开机自动挂载硬盘七 Xilinx Vitis安装1
  • POSTGRESQL 插入数据时主键冲突异常

    异常 xff1a 表INSERT不了数据 postgres 61 insert into t rows name values 39 b 39 ERROR duplicate key value violates unique constr
  • C语言的变长参数 va_arg

    void simple va fun int i va list arg ptr char s 61 NULL va start arg ptr i s 61 va arg arg ptr char va end arg ptr print
  • 通俗讲解 同步、异步、阻塞、非阻塞 编程

    真正意义上的 异步IO 是说内核直接将数据拷贝至用户态的内存单元 xff0c 再通知程序直接去读取数据 select poll epoll 都是同步IO的多路复用模式 1 同步和异步 同步和异步关注的是消息通信机制 所谓同步 xff0c 就
  • Nginx 提示 504 Gateway Time-out(The gateway did not receive a timely response from the...)解决办法

    本文介绍nginx出现504 Gateway Time out问题的原因 xff0c 分析问题并提供解决方法 1 问题分析 nginx访问出现504 Gateway Time out xff0c 一般是由于程序执行时间过长导致响应超时 xf
  • MySQL8 设置远程访问授权

    开启 MySQL 的远程登陆帐号有三大步 xff1a 1 确定服务器上的防火墙没有阻止 3306 端口 MySQL 默认的端口是 3306 xff0c 需要确定防火墙没有阻止 3306 端口 xff0c 否则远程是无法通过 3306 端口连
  • 三次握手,四次挥手,为什么是三次握手四次挥手

    三次握手 两次握手 xff08 情况1 xff09 两次握手 xff08 情况2 xff09 OK xff0c 下面正经地来回答下这个问题 xff0c 要搞清楚这个问题 xff0c 首先得了解TCP究竟是如何保证可靠传输的 PS xff1a
  • VirtualBox 磁盘扩容(亲测有效)

    参考 xff1a VirtualBox和VMware虚拟机centos dev mapper centos root 磁盘扩容 亲测有效 蜡笔小新儿的博客 CSDN博客 virtualbox虚拟机磁盘扩容 虚拟机磁盘扩容一 VirtualB
  • 完美解决 Could not find a version that satisfies the requirement 安装包名字 (from versions: )

    大家在刚开始使用python 时会遇到缺少python 库的问题 xff0c 提示 No module named 安装包名字 问题 在解决安装包问题中在网上找了很多的方法 xff0c 方法很多各种各样 xff0c 对一部分人有用 xff0
  • Go语言实现对称加密算法AES、DES、3DES和非对称加密算法RSA

    1 对称加密算法 1 1 特点 加密和解密使用的是同一个密钥 数据私密性双向保证 也就是加密和解密都不能泄露密码 1 2 优缺点 优点 加密效率高 适合大些的数据加密 缺点 安全性相对非对称低 1 3 go语言实现对称加密算法 1 3 1
  • Ubuntu 上安装 MozJpeg 详解

    参考 xff1a How to Install MozJpeg on Ubuntu 18 04 3 CodeFAQ 2023 04 26 花了很多时间 xff0c 绕了很多弯路才成功安装 mozjpeg 图片压缩命令 xff1b 特记录一下
  • ElasticSearch + Grafana 实现日志监控告警

    配置步骤 点击左边栏 x1f514 进入告警管理中心 xff1a Alert rules xff1a 告警规则管理 Contact points xff1a 告警联系人管理 Notification policies xff1a 告警通知策
  • sprintf函数

    sprintf指的是字符串格式化命令 头文件 xff1a include lt stdio h gt 功能 xff1a 把格式化的数据读入某个字符串中 xff08 最终结果是字符串类型 xff09 格式 xff1a char str 100
  • android 127.0.0.1/localhost connection refused 问题的

    下载 php java javascript 相关 api 手册的下载 调试中通过android simulator模拟器链接localhost或者127 0 0 1 xff0c 因为我在电脑上面建立了apache xff0c 我的代码大概
  • 配置MacVim,高亮+自动缩进+行号+折叠+优化

    将一下代码copy到 用户目录下 新建文件为 vimrc 保存即可生效 xff1b 如果想所有用户生效 请修改 etc vimrc 建议先cp一份 span style background color ffcc99 34 61 61 61
  • gitlab-ci.yml 项目实战

    gitlab ci yml 文件内容 image localhost 5000 wondershare ws builder latest Cache modules in between jobs cache key npm cache
  • iOS Block作为property属性实现页面之间传值

    我们可以把Block当做Objective C的匿名函数 Block允许开发者在两个对象之间将任意的语句当做数据进行传递 xff0c 往往这要比引用定义在别处的函数直观 另外 xff0c block的实现具有封闭性 closure xff0
  • iframe的跨域通信(代码示例)

    在前端开发中 xff0c 我们经常会使用iframe来嵌套其他网页或者同域的页面 但是 xff0c 如果iframe中嵌套的页面和当前页面不属于同源 xff0c 那么就无法直接进行通信 为了解决这个问题 xff0c 我们可以使用以下几种方式