You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel 8应用中部分YouTube视频无法嵌入显示的问题咨询

Laravel 8中部分YouTube视频无法嵌入iframe的解决办法

问题说明

在Laravel 8应用里嵌入YouTube视频时,部分视频会弹出「Display forbidden by X-Frame-Options」错误,但直接打开视频链接能正常观看;另一部分视频的嵌入代码却可以正常渲染。

对比两个iframe代码:

<!-- 无法正常显示的视频 -->
<iframe width="560" height="315" src="https://www.youtube.com/embed/xjqzftaWkmg" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture;" allowfullscreen></iframe>

<!-- 可正常显示的视频 -->
<iframe width="560" height="315" src="https://www.youtube.com/embed/ly36kn0ug4k" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" allowfullscreen></iframe>

核心原因

这个问题和视频的创作者嵌入权限设置直接相关:

  • YouTube视频默认允许嵌入,但创作者可在视频后台设置「禁止嵌入」选项,此时YouTube会返回X-Frame-Options: SAMEORIGIN或DENY响应头,阻止其他网站通过iframe加载该视频。
  • 能正常显示的视频,创作者未开启嵌入限制,YouTube返回的响应头允许跨域嵌入。

可行解决方案

1. 先验证视频嵌入权限

把视频ID替换到这个地址里:https://www.youtube.com/embed/[你的视频ID],直接在浏览器打开,如果页面显示「此视频无法嵌入」,说明创作者限制了权限,这种情况没法通过前端代码解决。

2. 用YouTube API提前判断(批量场景适用)

如果需要批量处理视频嵌入,可借助YouTube Data API的videos.list接口,通过contentDetails.embeddable字段判断视频是否允许嵌入,提前过滤无法嵌入的视频。Laravel里用Guzzle的示例代码:

$client = new \GuzzleHttp\Client();
$response = $client->get('https://www.googleapis.com/youtube/v3/videos', [
    'query' => [
        'id' => 'xjqzftaWkmg',
        'part' => 'contentDetails',
        'key' => '你的YouTube API密钥'
    ]
]);
$data = json_decode($response->getBody(), true);
$isEmbeddable = $data['items'][0]['contentDetails']['embeddable'];

根据$isEmbeddable的布尔值,决定渲染iframe还是显示“无法嵌入,请前往YouTube观看”的提示。

3. 降级处理方案

对于无法嵌入的视频,直接展示视频的原始链接文本(比如https://www.youtube.com/watch?v=xjqzftaWkmg),并添加按钮引导用户跳转至YouTube观看。

内容的提问来源于stack exchange,提问作者mstdmstd

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 07:37:06