我在一个html页面中嵌入了一个YouTube视频.我使用带有Flash的youtube iframe API(在我的情况下,我不能使用HTML5视频).自上次谷歌Chrome更新以来,Chrome会阻止自动播放并避免以编程方式播放/暂停视频(element.playVideo()无响应).(在其他浏览器上一切正常)
我找到的唯一方法是:
这个解决方案对用户来说是复杂的,有人有没有任何用户交互的解决方案吗?
当前的金丝雀版Chrome 65阻止了自动播放声音的iframed youtube视频.
Chrome的最新更改要求iframe具有allow ="autoplay"
如何在youtube iframe api中添加allow ="autoplay"?我在任何文档中都找不到它.
https://developers.google.com/web/updates/2017/09/autoplay-policy-changes#iframe
功能策略允许开发人员有选择地启用和禁用各种浏览器功能和API的使用.一旦来源获得了自动播放权限,它就可以将该权限委托给具有自动播放新功能策略的跨源iframe.请注意,默认情况下,在同源iframe上允许自动播放.
<iframe src="myvideo.html" allow="autoplay">Run Code Online (Sandbox Code Playgroud)
在嵌入的YouTube播放列表的左上角,有一个按钮可打开播放列表菜单。我正在尝试以页面加载方式以编程方式打开此列表。有没有办法做到这一点?
我认为这可以实现,contentWindow.postMessage但我不知道要使用什么功能。我找不到任何文档。
播放列表嵌入代码:
https://www.youtube.com/embed/NU1rsLIdpNA?list=PLdIivvLumeIVQHwOsZLYqp3-LZ75X1WKO
我网站的某些页面包含 youtube 视频,最近我注意到它们的描述很糟糕。
确切地说,它只显示:您的浏览器当前无法识别任何可用的视频格式。单击此处访问有关 HTML5 视频的常见问题解答。
即使它是空白的也没关系,但为什么它会选择这个东西......任何想法如何删除它?
我有一个带有 Youtube IFrame API 的 angular 应用程序。当网站/pwa 在安卓设备上使用,并且正在播放 Youtube 视频时,应用程序会自动在 android 通知托盘中创建一个通知,让您查看当前正在播放的视频。
我创建了自己的播放列表控制器,所以我没有使用 queueVideoById,因为我不喜欢默认的 youtube-iframe 播放列表控制器的工作方式(之后您无法删除排队的视频)。
从我的 AppComponent 我正在加载 YouTube IFrame API
app.component.ts
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.scss']
})
export class AppComponent implements OnInit, OnDestroy {
constructor(private youtubeHelper: YoutubeHelper) {
this.youtubeHelper.loadApi().then((isLoaded) => {
this.player.playSong(song.playerInfo.id);
});
}
@ViewChild('player') player: YoutubePlayerComponent;
}
Run Code Online (Sandbox Code Playgroud)
应用程序组件.html
<body>
<youtube-player #player [domId]="'player'" ... (previousPressed)="onPreviousPressed()" (nextPressed)="onNextPressed()"></youtube-player>
</body>
Run Code Online (Sandbox Code Playgroud)
此帮助程序用于加载 IFrame API 脚本。LoadApi 插入一个 src 设置为 youtube-iframe-url 的脚本标签:
import { Injectable } from '@angular/core';
import { Promise } …Run Code Online (Sandbox Code Playgroud) youtube-iframe-api android-mediasession android-notification.mediastyle
将 YouTube IFrame Player API 与从www.youtube-nocookie.com域播放的隐私增强模式视频一起使用时,如何禁用在 youtube.com 上设置的 cookie ?
在https://support.google.com/youtube/answer/171780?hl=en的“开启隐私增强模式”部分,建议使用www.youtube-nocookie.com域:
在不使用跟踪观看行为的 cookie 的情况下嵌入 YouTube 视频。
这很有效,并且不会按预期设置 cookie。
但是,我们使用 IFrame Player API(带有enablejsapi=1嵌入参数),它确实设置了 cookie。我们看到在 .youtube.com 域上设置了以下 cookie:
这些从位于https://www.youtube.com/iframe_api的 Iframe Player API 脚本中设置为 HTTP cookie (打开 Chrome 隐身窗口并直接查看该脚本 URL 并检查 cookie,您将看到上述 2 个 cookie 集)。我不确定这些 cookie 到底是什么,但它们看起来很像跟踪 cookie。
因此,这些是在用户与视频交互或采取任何同意操作之前设置的事实,意味着我们无法使用 IFrame Player API,同时在欧盟 cookie 指令方面仍然符合 GDPR。
所以问题是,我们如何在不设置 cookie 的情况下使用 IFrame Player API?
注意:我已经用标签youtube-iframe-api发布了这篇文章,希望谷歌能回答这个问题:
我们支持 Stack Overflow …
我刚刚开始在 Chrome 上的嵌入式 YouTube 视频中看到这一点(86.0.4240.193 - 最近更新,这可能就是我看到这个的原因) - 这些只是“报告”,因此视频仍然会显示,但可能会出现数百个错误不对吧!这就是我所看到的:
[Report Only] Refused to evaluate a string as JavaScript because 'unsafe-eval' is not an allowed source of script in the following Content Security Policy directive: "script-src 'strict-dynamic' 'unsafe-inline' https: 'report-sample' 'nonce-t9IE7nI2leo7qKxsm7d80g=='".
Run Code Online (Sandbox Code Playgroud)
这是我的 iFrame——
<iframe id="video-iframe" width="500" height="281" src="https://www.youtube.com/embed/HIDDENVIDEO" frameborder="0" allowfullscreen ></iframe>
Run Code Online (Sandbox Code Playgroud)
我不知道 CSP 应该是什么——我发现这个 CSP 显然可以解决他们的问题——
<iframe id="video-iframe" width="500" height="281" src="https://www.youtube.com/embed/HIDDENVIDEO" frameborder="0" allowfullscreen csp="script-src 'self' https://www.google-analytics.com/ https://www.youtube.com/ https://s.ytimg.com/; object-src 'self'; child-src https://www.youtube.com/* https://s.ytimg.com/"></iframe>
Run Code Online (Sandbox Code Playgroud)
没那么多——我只是看到:拒绝显示......
非常感谢任何帮助。
我刚刚检查了该developers.google.com/youtube/iframe_api_reference#Examples页面,我看到了同样的事情——这当然不应该发生,对吧?
Google PageSpeedInsights 在我的报告中将 Base.js 标记为未使用的 Javascript。487kb 相当大了。似乎来自包括 Youtube 播放器 iframe api。是否需要此文件?如果需要,有人知道为什么它在报告中被标记为未使用的 JS 吗?
iframe API: https: //developers.google.com/youtube/iframe_api_reference
在 PageSpeedInsights 上被标记为未使用 JS 的大文件: https: //www.youtube.com/s/player/c88a8657/player_ias.vflset/en_US/base.js
我想使用 iframe API 延迟加载 youtube 视频。IE。一开始只加载海报图片,当用户点击它时,只加载实际图片及其内容。
当将 youtube-iframe 嵌入到另一个已沙箱化的 iframe 中(以防止 XSS)时,播放器在所有主要浏览器中都会保持黑色。
请参阅https://jsfiddle.net/ms9fwLbk/
<!DOCTYPE html><html lang='en'><head><title>Sandbox iframe youtube problem</title></head><body>
<iframe sandbox='allow-scripts allow-presentation' width='600' height='400' srcdoc='
<!DOCTYPE html><html lang="en"><head><title>iframe</title></head><body>
<!-- original source-code shared from youtube: -->
<iframe width="560" height="315"
src="https://www.youtube.com/embed/QwS1r1mc888?controls=0"
frameborder="0"
allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture"
allowfullscreen></iframe>
</body></html>
'></iframe></body></html>
Run Code Online (Sandbox Code Playgroud)
浏览器的控制台日志显示以下错误,因为 youtube-api 在 CORS 方面存在问题(此处没有allow-same-origin 选项,因为允许脚本已启用并且会使 cookie 容易受到攻击)
Uncaught DOMException: Failed to read the 'cookie' property from 'Document':
The document is sandboxed and lacks the 'allow-same-origin' flag.
at Vb.m.get (https://www.youtube.com/yts/jsbin/www-embed-player-vflwaq4V_/www-embed-player.js:142:47)
Run Code Online (Sandbox Code Playgroud)
Access to XMLHttpRequest at 'https://www.youtube.com/error_204?...'
from origin …Run Code Online (Sandbox Code Playgroud) javascript ×4
youtube ×4
youtube-api ×2
android-notification.mediastyle ×1
cookies ×1
flash ×1
iframe ×1
jquery ×1
search ×1