2

我想&vhs=1在浏览器上每个 YouTube 视频 URL 的末尾添加参数。我曾尝试使用以下脚本,但它陷入了一个循环(不断添加&vhs=1 &vhs=1...)。

// ==UserScript==
// @name        Youtube Tape Mode
// @namespace   _pc
// @match       *://*.youtube.com/watch?*
// @run-at      document-start
// ==/UserScript==

var oldUrlPath  = window.location.pathname;

/*--- Test that "&vhs=1" is at end of URL, excepting any "hashes"
or searches.
*/
if ( ! /\&vhs=1$/.test (oldUrlPath) ) {

    var newURL  = window.location.protocol + "//"
                + window.location.hostname
                + oldUrlPath 
                + window.location.search.replace + "&vhs=1"
                + window.location.hash
            ;
    /*-- replace() puts the good page in the history instead of the
        bad page.
    */
    window.location.replace (newURL);
}

谁能提供一些关于我如何为此目的编写脚本的见解和建议?我似乎无法弄清楚如何摆脱无限循环问题。

4

1 回答 1

1

该脚本正在检查设置pathnameURL的一部分。此外,它至少有一个语法问题。此外,使用而不是; 它更健壮和便携。searchhosthostname

所以你的脚本会是这样的:

// ==UserScript==
// @name        Youtube Tape Mode
// @match       *://*.youtube.com/watch?*
// @run-at      document-start
// @grant       none
// ==/UserScript==

var oldUrlSearch  = window.location.search;

/*--- Test that "&vhs=1" is at end of URL, excepting any "hashes"
or searches.
*/
if ( ! /\&vhs=1$/.test (oldUrlSearch) ) {

    var newURL  = window.location.protocol + "//"
                + window.location.host
                + window.location.pathname
                + oldUrlSearch + "&vhs=1"
                + window.location.hash
                ;
    /*-- replace() puts the good page in the history instead of the
        bad page.
    */
    window.location.replace (newURL);
}

请注意,YouTube URL 的 URLsearch部分总是有一些东西,所以这段代码很好。对于其他网站,您可能需要进行额外检查并根据搜索最初是否为空白来添加&vhs=1或添加。?vhs=1

于 2013-04-17T21:40:39.437 回答