Как добавить определенную строку к URL-адресу, который совпадает, постоянно с Tampermonkey? Или другой метод?

Как добавить определенную строку к URL-адресу, который совпадает, постоянно с Tampermonkey? Или другой метод?

Я хочу добавить эту строку:

&sp=CAASAhAB

Каждый раз, когда выполняется поисковый запрос на YouTube, чтобы удалить этот дурацкий раздел «Люди также смотрели».

Я создал скрипт Tampermonkey, который работает довольно хорошо, но не работает, когда поиск выполняется с помощью собственного поискового окна веб-сайта.

Может кто-нибудь помочь? Решить эту проблему было бы здорово ради потомков.

Вот скрипт TamperMonkey:

// ==UserScript==
// @name         Youtube - Remove "People Also Watched" section from search results.
// @namespace    http://tampermonkey.net/
// @version      1.1
// @description  Add "&sp=CAASAhAB" to YouTube search results URL if not already present. Recommended to also use https://github.com/Vulpelo/hide-youtube-shorts
// @author       MattFor | @mattfor | https://github.com/MattFor
// @match        www.youtube.com/results?search_query=*
// @grant        none
// ==/UserScript==

(function () {
    "use strict";

    function containsString(mainString, subString) {
        return mainString.indexOf(subString) !== -1;
    }

    function updateURL() {
        var currentURL = window.location.href;
        var queryString = "&sp=CAASAhAB";

        if (!containsString(currentURL, queryString)) {
            window.location.href += queryString;
        }
    }

    updateURL();

    window.addEventListener("beforeunload", updateURL);
    window.addEventListener("DOMContentLoaded", updateURL);
})();

Редактировать №1: Обновил свой код на основе комментариев к вопросу, но существенных улучшений нет, похоже, что запрос YouTube POST отправляется толькоодин разсудя по вкладке сети.

// ==UserScript==
// @name         Youtube - Modify search request
// @namespace    http://tampermonkey.net/
// @version      1.1
// @description  Add "&sp=CAASAhAB" to YouTube search results URL if not already present.
// @author       MattFor | @mattfor | https://github.com/MattFor
// @match        www.youtube.com/results?search_query=*
// @grant        none
// ==/UserScript==

(function () {
    "use strict";

    function containsString(mainString, subString) {
        return mainString.indexOf(subString) !== -1;
    }

    function updateURL() {
        var currentURL = window.location.href;
        var queryString = "&sp=CAASAhAB";

        if (!containsString(currentURL, queryString)) {
            window.location.href += queryString;
        }
    }

    function modifySearchForm() {
        var searchForm = document.getElementById("search-form");

        if (searchForm) {
            searchForm.addEventListener("submit", function (event) {
                event.preventDefault();
                var formAction = searchForm.action;
                var modifiedAction = formAction + "&sp=CAASAhAB";
                searchForm.action = modifiedAction;
                searchForm.submit();
            });
        }
    }

    updateURL();
    modifySearchForm();

    window.addEventListener("beforeunload", updateURL);
    window.addEventListener("DOMContentLoaded", function () {
        updateURL();
        modifySearchForm();
    });
})();

решение1

Я никогда раньше не пользовался Tampermonkey, но попробую модифицировать ваш скрипт, чтобы справиться с этой проблемой.

Проблема, как я вижу, в том, что функциональность поиска контролируется тегом <form action=""></form>. Зная это, цель должна заключаться в том, чтобы изменить этот actionпараметр в URL, чтобы он добавлял sp=CAASAhABпараметр URL.

Этотдолженсделай это:

// ==UserScript==
// @name         Youtube - Remove "People Also Watched" section from search results.
// @namespace    http://tampermonkey.net/
// @version      1.1
// @description  Add "&sp=CAASAhAB" to YouTube search results URL if not already present. Recommended to also use https://github.com/Vulpelo/hide-youtube-shorts
// @author       MattFor | @mattfor | https://github.com/MattFor
// @match        www.youtube.com/results?search_query=*
// @grant        none
// ==/UserScript==

(function () {
    "use strict";

    function containsString(mainString, subString) {
        return mainString.indexOf(subString) !== -1;
    }

    function updateURL() {

        ////////////////////////////////////////////////
        // Append the URL parameter to the URL.
        var currentURL = window.location.href;
        var queryString = "&sp=CAASAhAB";

        if (!containsString(currentURL, queryString)) {
            window.location.href += queryString;
        }

        ////////////////////////////////////////////////
        // Append the URL parameter to the form action.
        var formAction = document.getElementById("search-form").action;
        var queryParam = "?sp=CAASAhAB";

        if (!containsString(formAction, queryParam)) {
            document.getElementById("search-form").action += queryParam;
        }

    }

    updateURL();

    window.addEventListener("beforeunload", updateURL);
    window.addEventListener("DOMContentLoaded", updateURL);
})();

Если это не сработает, вы могли перехватить отправку формы следующим образом: псевдокод на основе этогоОтвет на Stack Overflow:

document.querySelector("#search-form").addEventListener("submit", function(e) {
  e.preventDefault()
  e.submitter.formAction += "&sp=CAASAhAB";
  this.submit();
})

Или небольшой вариант на основе этого другогоОтвет на Stack Overflow

document.querySelector("#search-form").addEventListener("submit", function(e) {
  e.preventDefault();
  button.setAttribute("action", this.getAttribute("action") += "&sp=CAASAhAB");
  // Or try this instead of the above.
  // this.action += "&sp=CAASAhAB";
  this.submit();
});

Связанный контент