【问题标题】:Using YouTube's PlayerAPI inside of a Google Chrome Extension under Manifest V2 -- works, but generating lots of warnings在 Manifest V2 下的 Google Chrome 扩展程序中使用 YouTube Player API - 有效,但会产生大量警告
【发布时间】:2012-09-06 20:06:27
【问题描述】:

在 v2 下的 Google Chrome 扩展程序中使用 YouTube 的播放器 API 时,我收到了一些非严重错误消息。

我的 content_security_policy 中有以下定义:

"content_security_policy": 
    "script-src 'self' https://www.youtube.com/player_api https://s.ytimg.com/yt/jsbin/www-widgetapi-vfl9Ni0ki.js; object-src 'self'"

第一个引用 player_api 依赖于 widgetapi。如果您导航到 player_api 网址并查看其内容,这一点就很清楚了:

if (!window['YT']) {var YT = {};}if (!YT.Player) {(function(){var s = 'https:' + '//s.ytimg.com/yt/jsbin/www-widgetapi-vflU5wlSl.js';var a = document.createElement('script');a.src = s;a.async = true;var b = document.getElementsByTagName('script')[0];b.parentNode.insertBefore(a, b);YT.embed_template = "\u003ciframe width=\"425\" height=\"344\" src=\"\" frameborder=\"0\" allowfullscreen\u003e\u003c\/iframe\u003e";})();}

这一切都很好。我的内容安全策略有效,YouTube 视频加载成功。但是,在幕后,我看到了很多警告:

据我了解,无法删除或隐藏消息“不安全的 JavaScript 尝试使用 URL 访问框架...”。如果有人知道隐藏此消息的方法,我会非常感兴趣!

不过,我对“无法将消息发布到...”错误没有任何了解。一个快速的谷歌出现了一些遇到类似问题的人,但我没有看到任何解决方案。小部件API 已全部缩小 - 很难看到实际发生的情况。

我应该收到这些错误吗?有没有办法减轻错误?甚至压制它们(因为它们似乎并没有真正破坏任何东西)?

【问题讨论】:

  • YouTube 框架 API 使用 postMessage 与框架交互。这些错误是不言自明的。
  • 我根本没有发现错误信息不言自明。错误状态为“无法发布消息”。但是,如果我将这两个文件作为本地副本下载并删除有问题的代码行——我的播放器将停止工作。重新添加代码行会使其再次工作,但也会显示错误消息。 postMessage 似乎按预期工作......那么为什么会出现错误消息?
  • 另外,如果我在 document.ready 上初始化,如果我在我的 google chrome 弹出窗口打开时初始化我的播放器,我只会收到消息 - 然后它加载正常,没有任何抱怨。奇怪!
  • 耶!我想到了。问题是我在准备好文档时调用了 YT API,但我真正应该做的是在文档加载时调用它。这使 iFrame 能够完全加载到位 - 防止这些错误。 :)
  • 我正在尝试使用清单版本 2 和 Youtube IFrame Player API 做类似的事情。当我在清单版本的内容安全策略中包含 s.ytimg.com/yts/jsbin/www-widgetapi-vflMypqMg/www-widgetapi.js 时,它仍然会引发该文件违反 CSP 的错误。知道有什么问题吗?

标签: javascript iframe google-chrome-extension youtube-api youtube-javascript-api


【解决方案1】:

我相信“不安全的 JavaScript 尝试...”消息是由于 Chrome/Chromium 中的这个错误造成的:

http://code.google.com/p/chromium/issues/detail?id=17325

.. 防止在测试直接跨域通信时捕获此异常。

忽略该消息是安全的,但是(直到该错误得到修复)无法避免这些警告。

其他问题已经回答了。

【讨论】:

    【解决方案2】:

    无法向http://www.youtube.com 发布消息通过使用 $(window).load() 而不是 $(document).ready 包装 YTPlayer 实例化代码来解决。

    Uncaught TypeError: Cannot call method 'apply' of null 通过提供 onReady、onStateChange 和 onError 的函数来解决。您不能为这些回调之一提供 null。

    【讨论】:

    • 知道如何为 Chrome 解决这个问题吗?
    猜你喜欢
    • 1970-01-01
    • 2020-04-23
    • 1970-01-01
    • 2019-01-12
    • 1970-01-01
    • 1970-01-01
    • 2023-03-04
    • 2023-01-21
    • 1970-01-01
    相关资源
    最近更新 更多