Google chrome extension Chrome扩展中的Youtube播放器API

Google chrome extension Chrome扩展中的Youtube播放器API,google-chrome-extension,youtube-api,Google Chrome Extension,Youtube Api,我希望在我的Youtube Chrome扩展中使用Youtube播放器API。 我的目标是能够使用pageAction的弹出窗口从我的内容脚本控制播放器在Youtube网站上的控件 事情是这样的- 单击弹出窗口中的“播放”按钮向内容脚本发送消息,内容脚本接收消息并使用播放器API事件“playVideo()”播放视频 由于内容脚本和页面本身是相互隔离的,因此我不能简单地从页面获取播放器的对象,据我所知,我不能使用消息将对象从页面发送到内容脚本 现在,我可以通过使用HTML5视频事件绕过所有这些麻

我希望在我的Youtube Chrome扩展中使用Youtube播放器API。
我的目标是能够使用pageAction的弹出窗口从我的内容脚本控制播放器在Youtube网站上的控件

事情是这样的-
单击弹出窗口中的“播放”按钮向内容脚本发送消息,内容脚本接收消息并使用播放器API事件“playVideo()”播放视频

由于内容脚本和页面本身是相互隔离的,因此我不能简单地从页面获取播放器的对象,据我所知,我不能使用消息将对象从页面发送到内容脚本

现在,我可以通过使用HTML5视频事件绕过所有这些麻烦,但不幸的是,这在实时流上不起作用,因为flash仍然在那里使用,所以除了加载和使用播放器API,我别无选择,对吗?
有没有办法通过Youtube网站本身的URL参数来控制播放器?
(我真的更喜欢一切,而不是加载额外的脚本和外部脚本)

在代码方面,我希望获得有关设置加载外部脚本所需权限的帮助。
我看到有必要在
清单
文件中声明
内容安全策略
,但我不理解语法以及如何写下它,所以我想举个例子,以及其他需要的东西

在我的内容脚本中,我将使用取自YT player API文档的下一段代码来注入脚本:

var tag = document.createElement('script');
tag.src = "https://www.youtube.com/iframe_api";
var firstScriptTag = document.getElementsByTagName('script')[0];
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);

function onYouTubeIframeAPIReady() {
    console.log('--- The YT player API is ready from content script! ---');
}

这应该保存在manifest.json中

 {
"manifest_version": 2,

"name": "example",
"description": "Lorem Ipsum dollar sit amet",
"version": "0.0",

"browser_action": {
  "default_icon": "icon.png",
  "default_popup": "popup.html"
},
"permissions": [
  "activeTab",
  "tabs",
  "content_security_policy"
]
}

由于内容脚本无法访问页面javascript对象,因此在页面中插入一个脚本(官方文档解释了如何)。注入的脚本可以访问对象,然后可以使用dom上的消息传递或写入与内容或弹出窗口进行通信。

YouTube视频的嵌入iframe需要在URL中包含enablejsapi=1。YouTube没有在其网站上使用iframe API,因此这不起作用。@凯尔:你的意思是使用URL参数控制播放机不起作用吗?因为当使用播放机API时,它确实起作用,你可以打开控制台并输入它,例如:
document.getElementById('movie_player')。playVideo()
你会发现它工作得很好:)现在的问题是如何加载它以便在内容脚本中使用。谷歌将介绍如何在扩展(而不是内容脚本)上注入js。这使您可以访问player对象。@ZigMandel:谢谢我这么做,效果很好,我正在使用
chrome.tabs.sendMessage
从弹出窗口(扩展脚本)向内容脚本发送一条消息,然后这次使用
window.postMessage
从内容脚本向注入脚本发送另一条消息,所有信息都可以在这里找到:很高兴它有帮助,我把它作为一个答案添加了进来。这就是它的工作原理。chrome指定的布局可能“内容安全策略”不正确,但格式不正确。@JosephHoyne感谢您发布答案并希望提供帮助,但正如Xan提到的,它是不正确的。我尝试过使用它,但没有成功:
“内容安全策略”:“脚本src'self”“不安全评估”;https://www.youtube.com/iframe_api;对象src“self”