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

Sea*_*son 6 javascript youtube google-chrome-extension

我试图了解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"
]
Run Code Online (Sandbox Code Playgroud)

我在这里放置了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扩展程序等"外部设备"上播放.

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

Wor*_*man 10

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

问题

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

 chrome-extension://
 file://
Run Code Online (Sandbox Code Playgroud)

似乎内容许可者UMG选择阻止来自扩展或本地文件的任何播放.另一种方法是避免使用包含许可内容的视频,但这很无聊.

这很不方便,但有一种解决方法可以让你将iframe播放器实现到扩展中.所有Youtube关心的是播放器嵌入在互联网上的某个页面上.

代理页面

尝试使用示例中的jsfiddle结果框替换popup.htm中的iframe src 并重新加载插件.

 <iframe width="200" height="200" src="http://fiddle.jshell.net/E7B9C/17/show/"></iframe>
Run Code Online (Sandbox Code Playgroud)

您应该会看到之前播放的"不可用"视频.您的扩展程序现在引用您在jshell.net上控制的页面.所有Youtube都知道你是从jshell.net调用他们的玩家.

控制

现在,我们有一个球员,你可能会发现,你没有任何提供给你,因为你现在引用自己的iframe多数民众赞成引用的Youtube iframe和它的API Youtube的控制.好像它已经不够有趣了,你现在可以制作自己的iframe API,从chrome-extension到你的iframe与Youtube的iframe进行通信!

在正常情况下,父级可以设置子框架的window.location.hash,该框架会监视并解析所有通过的更改.然后,孩子用一些新信息直接父母中调用一些回调.

编辑:而不是使用window.location.hash,您可以使用HTML5的window.postMessage(),而不必处理连续检查和解析哈希.

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