I want to add the parameter &vhs=1
at the end of each YouTube video URL on my browser. I have tried using the following script but it gets stuck in a loop (keeps adding &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);
}
Can anyone offer some insights and advice as to how I can write the script for this purpose? I can't seem to figure out how to get out of the infinite loop problem.
That script is checking the
pathname
but setting thesearch
part of the URL. In addition, it has at least one syntax problem. Also, usehost
rather thanhostname
; it's more robust and portable.So your script would be like:
Note that YouTube URL's always have something in the
search
part of the URL, so this code is fine. For other sites, you may need an additional check and to add either&vhs=1
or?vhs=1
depending on whether the search was initially blank.