如何正确使用 postMessage 通过 html5 和现代浏览器进行跨域消息传递?我仍然收到错误

2023-12-03

我确信这里出了问题,但我不能完全指出它......这个例子here表现良好,控制台上没有任何通知或错误,因此这意味着我的浏览器支持使用 html5 进行跨域消息传递(当然是这样,它是 Chrome 14..)。

我的代码或多或少执行以下操作:WebsiteA.com 中加载的脚本创建了一个 iframe 并将其附加到 WebsiteA.com 的文档中。附加的框架将包含 WebsiteB.com,加载时,它必须向其父级 WebsiteA.com 发送一条消息,告诉它 WebsiteB.com 已准备好接收一些 JSON。当 WebsiteA.com 收到此消息时,它会发回 JSON。

所以 WebsiteA.com 之前有一行</body>像这样:<script scr="http://WebsiteB.com/load-my-iframe.js" type="text/javascript"></script>,并且在里面load-my-iframe.js,我有以下内容:

var child = document.createElement('iframe');
child.src = 'http://WebsiteB.com/child.html';

var body = document.getElementsByTagName('body')[0]
body.appendChild(child);

var SomeJSON = {"something" : "that WebsiteB should have"};

window.onmessage = function (e) {
    if (e.origin === 'http://WebsiteB.com' && e.data === 'ready') {
            e.source.postMessage(SomeJSON, 'http://WebsiteB.com');
    }
}

这样就创建了 iframe 元素,将其附加到 WebsiteS.com 文档并等待它说它已准备好(我猜......)。在 Website.can 上,我有文件 child.html ,它是srcWebsite.com 文档中加载的 iframe 的文件,该文件具有以下内容:

<!DOCTYPE html>
<html lang="pt">
    <head>
        <title>WebsiteB.com</title>
        <script type="text/javascript">
            window.onload = function () {
                window.parent.postMessage('ready','*');
            }

            window.addEventListener('message', receiveMessage, false);
            function receiveMessage(event) {
                if (event.data.something === "that WebsiteB should have") {
                    document.write('It worked!');
                }
            }
        </script>
    </head>
    <body>
    </body>
</html>

现在奇怪的事情是:

遗憾的是,我不拥有 WebsiteA.com 和 WebsiteB.com,但我设法在一个顶级域和一个子域(以 .no.de 结尾)之间工作。它确实有效,但在 Google Chrome 14 的控制台中我得到了经典Unsafe JavaScript attempt to access frame with URL http://WebsiteA.com/ from frame with URL http://WebsiteB.com/child.html. Domains, protocols and ports must match.. The html5demos 中的示例没有这个错误就可以正常工作。

为什么会出现此错误以及如何消除它?


我刚刚尝试过你的代码,这似乎在 Chrome 中有效。它使用jsfiddle和jsbin在父窗口和子窗口之间传递消息。

http://jsbin.com/oxesef/4/edit#preview

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

如何正确使用 postMessage 通过 html5 和现代浏览器进行跨域消息传递?我仍然收到错误 的相关文章

  • 如何在 Google 地图 v3 中的每个标记上添加编号?

    我想问大家如何使用 JavaScript 在 Google 地图 v3 中的每个标记上动态添加数字 例如 第一个标记是 1 第二个标记是 2 等等 在这种情况下 我的位置数据如下 new google maps LatLng 1 3667
  • 在 Bootstrap 中的悬停中打开折叠选项卡

    我在 Bootstrap 中有折叠面板 单击选项卡标题即可打开该面板 我试图弄清楚如何使用鼠标悬停在选项卡的总宽度上来打开 但我没有得到它 下面是默认关闭的单个选项卡的代码 div class panel panel default sty
  • 无法使用带有 socket.io 的媒体源从媒体记录器跳转到流

    当首先加载视频观察客户端然后加载网络摄像头客户端时 以下代码可以正常工作 但是 如果顺序交换或以任何方式中断流 例如通过刷新任一客户端 则流将失败并且媒体源会将其就绪状态更改为关闭 我的假设是 在开始时接收的视频需要初始化标头才能启动 并且
  • 为什么我的 OpenLayers 3 地图未在 Internet Explorer 11 中显示?

    I am trying to serve up a map in Internet Explorer that works fine in Firefox or Chrome While debugging I noticed that s
  • 动态创建特定数量的输入表单元素

    我读过很多关于动态添加字段集的博客和帖子 但它们都给出了非常复杂的答案 我所要求的并没有那么复杂 我的 HTML 代码
  • jQuery 在变量中搜索文本?

    我有一个变量 其中包含一些文本 一些html 基本上可以是一个字符串 我需要在变量中搜索特定字符串 以便在包含该变量时以不同方式处理该变量 这是我正在尝试做的事情的一个片段 显然不起作用 each data results function
  • JavaScript 可以在重新加载后保持任何状态吗?

    有没有办法让 JavaScript 通过重新加载来保存任何变量 如果用户点击重新加载按钮 一旦页面重新加载 JavaScript 是否会保留任何状态 建议 Cookie HTML 5 网络存储https www w3schools com
  • 硒元素不相互作用

    我开始使用selenium node js 到目前为止一切正常 突然相同的脚本抛出错误 未处理的承诺拒绝警告元素不可交互 我尝试设置等待 直到什么也没有
  • .catch() 的承诺被拒绝,但在 Promise.allSettled 中显示为已履行[重复]

    这个问题在这里已经有答案了 这是问题的简化版本 有一些承诺 但很少 then 链条 以及一个 catch 错误处理块 每个承诺都可能解决或拒绝 因此我使用Promise allSetted根据排列顺序和状态了解哪个承诺失败了 当所有承诺都解
  • 使用 getElementById 获取锚标记的对象

    anchorobject document getElementById backbutton alert anchorobject a href http www hotmail com back a 上面的代码提醒 href 属性字符串
  • 如何在 SASS 中从 Web 添加 .ttf 字体文件以在 HAML 中显示

    font face font family MyFont src url https font name ttf raw true font main MyFont sans serif some class font family fon
  • 如何通过PHP获取div?

    我得到一个页面使用file get contents来自远程服务器 但我想过滤该页面并从中获取一个使用 PHP 具有 text 类的 DIV 我开始于DOMDocument但我现在迷路了 有什么帮助吗 file file get conte
  • Next.js 切换 div 标签的显示

    Code export default function Header let showMe false function toggle showMe showMe return lt gt
  • dc.js 和 crossfilter 减少了一周中每天的平均计数

    我很难正确设置我的交叉过滤器组 也许有人可以给个提示 我的数据结构看起来或多或少是这样的 datetime 2014 01 01 20 00 00 id 1 datetime 2014 01 01 22 21 08 id 2 datetim
  • css/html:空格中断修复,现在无法正常编码?

    是的 所以我遇到的问题是 如果你输入一个没有空格的长句子 例如 eeeeeeeeeeeeeeeeeeeeeeeeee 它会自行中断 但现在我需要开始输入一些丑陋的不间断编码 例子 http jsfiddle net r3CFJ http j
  • 使用 Getter 函数从 Angular 服务公开对象返回未定义

    这是代码 authServ getUser 从任何地方返回 一个空对象 对应于此 var 的声明 即使在我根据此 问题 1 对返回语法进行修改之后也是如此 谁能告诉我这是什么问题吗 我不明白为什么它不起作用 app factory auth
  • Phantomjs / Casper.js 带有旋转代理?

    我有一个简单的目标 使用以下任一方式加载网页phantom js 开箱即用 或casper js 很好也更容易 但是使用代理并旋转它如果当前列表不好 即网页加载失败或类似情况 则从列表中选择 我知道 casper js 有 proxypar
  • Aurelia.io:如何导航到路线

    我有一个包含配置路由的 router js 文件 路线 js export class App configureRouter config router config title Aurelia config map route welc
  • javascript 权限被拒绝访问属性

    我在从不同的 iframe 访问属性时遇到问题 我不断收到此权限被拒绝访问属性错误 我见过有人多次询问他们是否使用 file 但没有人 除了我 所以这个问题永远不会得到解决 我不会在网络上这样做 我所有帧的 src 都位于硬盘驱动器上的同一
  • 使重复的scrollBy像jQuery的动画scrollTop一样平滑

    如何使重复的scrollBy调用更平滑 就像使用jQuery的animatescrollTop制作动画一样 目前它是跳跃的 页面在不同的滚动位置之间跳转 我怎样才能让它更顺畅 这是滚动代码 window scrollBy 0 10 scro

随机推荐

  • 如何编辑 gpedit 策略

    我想问一下如何使用C 编辑gpedit msc策略 gpedit msc 只是注册表设置的一个界面 gpedit 没有 API 或公开框架 要像 gpedit 一样操作一个值 您需要操作关联的注册表键值 class RegKey stati
  • 如何用 python 检测按键释放(而不是按键)?

    如何使用 python 3 检测按键释放 就像我按下了键一样a1秒 当我将手指从琴键上移开时 松开钥匙 它会print Key a pressed then released 我尝试用模块来做到这一点keyboard但我不知道如何使用它 我
  • 为什么在 R 中会导致无效格式 '%d?

    下面给出的代码是将二进制文件从 float32 转换为比例因子为 10 的 16b 我收到 d 无效的错误 setwd C 2001 for b in paste data 1 365 flt sep conne lt file b rb
  • 如何抓取动态分配其内容的 Microsoft CVE 网页(最好使用 Python)?

    相关页面是https portal msrc microsoft com en US security guidance advisory CVE 2018 8176 查看页面源代码时 我没有获得有关渲染页面内容的任何相关信息 如何抓取描述
  • 如何让2个div同时滚动

    对于我的网站设计 我有一个 div class stuffhere div 内容存储的位置 这些 div 有 2 个 第二个在第一个之前 借助z index 还有两者的内容stuffhere标签重复 但有时顶层的图像stuffhere被替换
  • PhpMyAdmin 安装错误

    我刚刚在 Linux Fedora 13 上使用 PHP 5 3 3 安装了 phpmyadmin 我收到以下 2 个错误 首先 我在登录屏幕上看到以下内容 无法加载 mcrypt 扩展 请 检查你的 PHP 配置 我在 google 上搜
  • Python-从长时间运行的子进程读取输出[重复]

    这个问题在这里已经有答案了 使用 subprocess 模块 Python 2 7 我正在运行命令并尝试在运行时处理其输出 我有如下代码 process subprocess Popen udevadm monitor subsystem
  • svn:switch 不能与相对的 svn:external 一起使用吗?

    我们有一个相对 svn external 的子文件夹 project subfolder 在新的主干结帐中 它指向 TRUNK project subfolder 在新的分支结帐中 它指向 BRANCH branchName project
  • AJAX JQUERY 相关:- 如何在 ajax 加载的页面上调用 ajax

    假设我通过 AJAX 调用搜索 现在我想在页面上调用另一个AJAX 该AJAX将由AJAX加载并且可以编辑
  • 使用 iText 获取 PDF 文件中的图像 DPI

    我正在尝试获取有关通过 iText 使用 Java 保存到 PDF 文件中的扫描图像的信息 Using 答案和评论 我得到了宽度和高度 通过 Matrix 或通过 BufferedImage 我们的想法是使用answer这里计算DPI 但我
  • 用贝塞尔曲线绘制圆弧

    我正在尝试使用贝塞尔曲线绘制圆弧 我了解到 您无法使用贝塞尔曲线绘制完美的圆 但您可以接近 不幸的是 数学太复杂了 我个人无法弄清楚 我可以将下面的 A1 切片创建为三角形 但我不知道如何确定控制点 另外 如果我尝试沿相反方向从圆中绘制一个
  • Google Docs API - 更新链接表

    我正在尝试使用新的 API 更新 Google 文档中的表格 表格是从 Google Sheet 链接的 我尝试了谷歌云中的API资源管理器 我能够提取 json 格式的文档 然后过滤掉表格 但在表 json 结构中 我没有找到任何可以更新
  • Python:从同一个解释器同时执行多个脚本

    我有一个蟒蛇脚本 再次执行4 5个Python脚本 出于性能原因 我想使用相同的解释器来执行所有脚本 我该如何处理这个问题 明显的解决方案 可能需要一些调整 是仅从主脚本调用每个脚本的主函数 例如 如果 script1 py 包含 usr
  • 关于 Web 应用程序端口的困惑

    我有一个已经深入开发的项目 并且端口存在问题 客户端是用骨干编写的 SPA 使用 Sails 作为服务器 问题在于 Client 在 Express 中运行在端口 80 上 而 Sails 在端口 1337 上运行 我想在 Sails 内托
  • powershell cmdlet 始终输出一个表,其列可由用户选择

    如果下面只有 4 列 我会得到一个可以通过 select 进一步修剪的表格 但如果我添加更多字段 输出就会变成一个列表 如何使其始终成为一个表而不破坏后续的选择Format table做 初始表将来自 cmdlet 用户将执行后续选择返回一
  • 为什么不将函数参数存储在 XMM 向量寄存器中?

    我目前正在阅读一本书 计算机系统 程序员的视角 我发现 在 x86 64 架构上 我们仅限于 6 个整数参数 这些参数将传递给寄存器中的函数 接下来的参数将在堆栈上传递 此外 前最多 8 个 FP 或向量参数在 xmm0 7 中传递 为什么
  • 如何检测 React 应用程序中动态生成的元素外部的点击?

    我一直在与 SPA 合作React 18 and 电影数据库 TMDB API 我目前正在研究搜索功能 有一个搜索结果列表 如下所示 为了在这个列表上有一个漂亮的滚动条 我使用React Perfect 滚动条 当我点击列表外部时 我需要该
  • 为什么 Jetty 使用 text/html 内容类型提供 css

    我在 Scalatra 应用程序中使用嵌入式 Jetty 服务器 问题是它服务css文件与text html内容类型 这是主要方法 package yard web import org eclipse jetty server Serve
  • 如何在 Javascript 中获取嵌套数组的长度?

    我有一个嵌套数组的示例 var testArray 1 2 3 4 5 6 7 8 9 10 11 12 这是我获取嵌套数组长度的函数 Array prototype getLength function var sum 0 functio
  • 如何正确使用 postMessage 通过 html5 和现代浏览器进行跨域消息传递?我仍然收到错误

    我确信这里出了问题 但我不能完全指出它 这个例子here表现良好 控制台上没有任何通知或错误 因此这意味着我的浏览器支持使用 html5 进行跨域消息传递 当然是这样 它是 Chrome 14 我的代码或多或少执行以下操作 WebsiteA