javascript – 无法通过Google Chrome扩展程序中的YouTube JS API访问YouTube视频,但可以在JS Fiddle内部访问

前端之家收集整理的这篇文章主要介绍了javascript – 无法通过Google Chrome扩展程序中的YouTube JS API访问YouTube视频,但可以在JS Fiddle内部访问前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图了解YouTube视频播放的“阻止”机制背后的逻辑.

在这里,我试图播放一首被JS Fiddle内部嵌入播放阻止的歌曲.观察它的工作原理:

http://jsfiddle.net/E7B9C/17/

现在,我在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扩展程序等“外部设备”上播放.

正在寻找绕过这个问题的方法.

解决方法

Youtube iframe实现似乎阻止某些引用URL显示许可内容.

问题

这些引用模式似乎不适用于您正在测试的特定视频.

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(),而不必处理连续检查和解析哈希.

这应该可以帮助你正常运转.

猜你在找的JavaScript相关文章