javascript - 在 Firefox 中调用方法 Modal ContentWindow.postMessage 的权限被拒绝

标签 javascript firefox youtube-api postmessage google-api-js-client

我正在与 YouTube Data API v3 合作。 Google 建议使用以下方式加载库:

<script src="https://apis.google.com/js/client.js?onload=googleApiClientReady">

它工作正常,但是当我将这样的脚本加载到 Firefox 的模式窗口中时(必须是这样。我无法控制 Sitecore 调用我的小部件的方式),它会失败:

错误:https://accounts.google.com权限被拒绝调用方法 ModalContentWindow.postMessage

它来自 Google 的 client.js 在加载时调用的内部回调,即使我省略 ?onload 部分也是如此。

加载到独立选项卡中工作正常。 IE 和 Chrome 都表现得很好。

有没有好的方法让它在 FF 模态窗口中工作? (如果重要的话,我正在运行 27.0.1)

更新:我通过直接调用 YouTube Data API HTTP 端点解决了这个问题。我仍然想知道这是怎么回事postMessage() thingy在 FF 的模态窗口中,以及 Google client.js 的作者是否知道它。

最佳答案

主要问题是Firefox有capability.policy.default.Window.postMessage.get策略,但没有capability.policy.default.ModalContentWindow.postMessage.get策略。 有两种方法可以解决这个问题。

  • 添加 Firefox pref("capability.policy.default.ModalContentWindow.postMessage.get", "allAccess");
  • 不是将脚本加载到模态窗口中,而是直接将其放入 iframe 中。 iframe 将具有 Window 类。
顺便说一句,我在 FF28 中遇到了这个问题。在 FF31 中一切正常。

关于javascript - 在 Firefox 中调用方法 Modal ContentWindow.postMessage 的权限被拒绝,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22073611/

相关文章:

javascript - YouTube iframe播放器API-OnStateChange不触发

youtube - 通过API启用直播

javascript - 复制电子表格时不会复制触发器

javascript - 如何在多个元素上设置焦点但防止在它们之间转移焦点?

css - Firefox CSS float 错误?

html - 导航栏中的 Twitter Bootstrap 搜索框在 chrome 和 firefox 中呈现不同

javascript - 根据 API 的结果嵌入 YouTube 视频

javascript - Promises 有 'finally' 模式吗?

javascript - React 中设置的时间选择器 - jquery-timepicker

javascript - 使用 WebAPI window.crypto.subtle.encrypt() 加密数据时出现 TypeError