在这里,我试图播放一首被JS Fiddle内部嵌入播放阻止的歌曲.观察它的工作原理:
现在,我在Google Chrome扩展程序中使用完全相同的代码:
http://www.meomixes.com/如果您想点击下载扩展程序.
http://www.meomixes.com/Test.crx直接链接到扩展名.
观察我无法播放相同的YouTube视频:
我想知道我的调试选项对于这个场景是什么.有没有人对我应该探索的内容有任何想法?我已尝试在清单中请求以下权限,但它没有任何效果:
"permissions": [ "http://*.youtube.com","https://*.youtube.com","http://*.google.com","https://*.google.com" ]
我在这里放置了Test.crx的完整源代码:http://www.meomixes.com/Test.zip
载入:
>解压缩
>转到Google Chrome的扩展程序页面并启用“开发者模式”
>单击“加载未压缩的扩展”并指向解压缩的目录.
>观察视频无法播放.
最后的注意:这首歌在Facebook帖子中愉快地播放.
编辑:我发现这个:http://gdata.youtube.com/feeds/api/videos/UfESt2KdOdc?v=2&prettyprint=true有问题的视频.它配对:http://apiblog.youtube.com/2011/12/understanding-playback-restrictions.html.
只是建立在第一个响应.基本上,有一个名为“联合”的设置可以防止在电视和Google Chrome扩展程序等“外部设备”上播放.
正在寻找绕过这个问题的方法.
解决方法
问题
这些引用模式似乎不适用于您正在测试的特定视频.
chrome-extension:// file://
似乎内容许可者UMG选择阻止来自扩展或本地文件的任何播放.另一种方法是避免使用包含许可内容的视频,但这很无聊.
这很不方便,但有一种解决方法可以让你将iframe播放器实现到扩展中.所有Youtube关心的是播放器嵌入在互联网上的某个页面上.
代理页面
尝试使用示例中的jsfiddle结果框替换popup.htm中的iframe src并重新加载插件.
<iframe width="200" height="200" src="http://fiddle.jshell.net/E7B9C/17/show/"></iframe>
您应该会看到之前播放的“不可用”视频.您的扩展程序现在引用您在jshell.net上控制的页面.所有Youtube都知道你是从jshell.net调用他们的玩家.
控制
现在我们有了一个播放器,您可能会注意到您没有任何Youtube控件可用,因为您现在引用了自己的iframe,它引用了Youtube iframe及其API.好像它已经不够有趣了,你现在可以制作自己的iframe API,从chrome-extension到你的iframe与Youtube的iframe进行通信!
在正常情况下,父级可以设置子框架的window.location.hash,该框架会监视并解析所有通过的更改.然后孩子在parent directly中用一些新信息调用一些回调.
编辑:而不是使用window.location.hash,您可以使用HTML5的window.postMessage(),而不必处理连续检查和解析哈希.
这应该可以帮助你正常运转.