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