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

如何让UserScript仅作用于YouTube站点而非内嵌视频?

解决YouTube UserScript干扰内嵌视频的问题

嘿,这个问题我太懂了!你遇到的核心问题是脚本没有区分顶层YouTube页面和内嵌在其他网站的YouTube iframe——用window.location判断的话,内嵌iframe的地址也是YouTube的,所以脚本会错误地在里面执行,导致内嵌视频挂掉。

两步搞定这个问题:


1. 先在UserScript元数据里锁定生效范围

首先确保你的脚本只在YouTube主站触发,不要让它跑到其他网站去。在脚本开头的元数据里,把@match设置成严格匹配YouTube主站:

// ==UserScript==
// @name         你的脚本名称(比如Force Old YouTube Layout)
// @version      0.1
// @description  强制YouTube加载旧版站点样式
// @author       你的名字
// @match        https://www.youtube.com/*
// @grant        none
// ==/UserScript==

这一步先把脚本的触发范围限制在YouTube主域名下,避免在完全无关的页面运行。

2. 加入顶层窗口判断,排除内嵌iframe

这是关键!在脚本逻辑最开头,加上判断当前页面是否是顶层窗口——也就是用户直接打开的YouTube页面,而不是嵌在其他网站里的iframe:

(function() {
    'use strict';

    // 核心判断:只在顶层窗口执行脚本,内嵌iframe直接退出
    if (window.top !== window.self) {
        return;
    }

    // 下面是你原来的逻辑,比如追加旧版样式的配置项
    const url = new URL(window.location.href);
    // 替换成你实际用来强制旧版样式的参数
    const oldLayoutParam = 'disable_polymer'; 

    // 避免重复添加参数导致循环跳转
    if (!url.searchParams.has(oldLayoutParam)) {
        url.searchParams.set(oldLayoutParam, '1');
        window.location.href = url.toString();
    }
})();

为什么这样有效?

  • window.top指向整个浏览器窗口的顶层页面,window.self指向当前脚本所在的页面。如果是内嵌的YouTube iframe,window.self是iframe本身,window.top是外面的父页面,两者不相等,脚本就会直接退出,不会干扰内嵌视频。
  • 用URL对象处理参数比直接拼接字符串更安全,还能避免重复添加参数导致的无限跳转问题。

另外你提到之前用的另一种URL获取方法,应该是document.URL,它和window.location.href效果差不多,但核心问题不在URL的获取方式,而是没有判断页面上下文。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 08:08:45