【问题标题】:Is there a working simple example of postMessage working with a sandboxed page?是否有 postMessage 与沙盒页面一起工作的简单示例?
【发布时间】:2013-04-13 20:46:15
【问题描述】:

查看此文档中的 postMessage 示例:http://developer.chrome.com/trunk/apps/app_external.html#postMessage

似乎表明沙盒页面将同步注册事件处理程序,否则它应该如何获取 postMessage 事件?

我想这与这里的错误有关:https://code.google.com/p/chromium/issues/detail?id=154662 似乎您不能使用窗口回调将 postMessage 发送到沙盒 iframe,但是提到了一种解决方法,您可以在沙盒页面中使用包含 iframe 的页面。这里唯一的问题是尚不清楚事件如何/何时触发以及它在哪里可见......

这个沙盒的东西看起来非常复杂,并且它周围的文档具有误导性和/或过时。这个例子有意义吗?是否可以在不先获取消息并记录 event.source 的情况下向后台页面发送消息?

如何在后台页面中注册事件侦听器以响应从沙盒页面发回的消息?这里有这么多问题,而我所拥有的只是一个破碎的例子。

【问题讨论】:

  • 玩了一段时间后,这似乎奏效了:setTimeout(function() { win.contentWindow.frames[0].postMessage('I just called... to say... hi.', '*'); }, 100); 但是需要超时来执行此操作似乎很疯狂。
  • 我无法回答您的问题,因为它的措辞。但你是对的:这个例子有点过于油嘴滑舌了。这在技术上是正确的,因为它确实“将消息发布到它打开的沙盒页面”。这不是一个非常有用的例子,因为它不可靠。请注意 WHATWG 规范的建议“如果要将消息发送到新创建的子 iframe 的窗口,建议作者让子文档向其父级发布一条消息,宣布他们已准备好接收消息,并让父级等待在开始发布消息之前为这条消息。”
  • 我已经完成了。不幸的是,答案并不简洁,但它完成了工作,并且确实按照我猜想的方式工作。今天晚些时候我会在这里回答我自己的问题。

标签: google-chrome-app


【解决方案1】:

github 上的 chrome-app-samples 上的示例更符合您的要求。这是添加事件侦听器以响应事件的沙盒页面:https://github.com/GoogleChrome/chrome-app-samples/blob/master/sandbox/sandbox.html

这是使用postMessage的背景页面:https://github.com/GoogleChrome/chrome-app-samples/blob/master/sandbox/mainpage.js

github 示例比文档中的示例丰富得多。 https://github.com/GoogleChrome/chrome-app-samples 提供了您可能需要做的所有事情的示例。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-05-22
    • 2018-03-23
    • 2013-10-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多