Wie kann ich mit Tampermonkey einer URL, die immer übereinstimmt, einen bestimmten String anhängen? Oder eine andere Methode?

Wie kann ich mit Tampermonkey einer URL, die immer übereinstimmt, einen bestimmten String anhängen? Oder eine andere Methode?

Ich möchte diese Zeichenfolge anhängen:

&sp=CAASAhAB

Jedes Mal, wenn eine YouTube-Suchanfrage durchgeführt wird, soll dieser dumme Abschnitt „Nutzer haben auch angesehen“ entfernt werden.

Ich habe ein Tampermonkey-Skript erstellt, das ziemlich gut funktioniert, aber nicht funktioniert, wenn die Suche über das Suchfeld der Website durchgeführt wird.

Kann mir jemand helfen? Eine Lösung wäre für die Nachwelt großartig.

Hier ist das TamperMonkey-Skript:

// ==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);
})();

Bearbeitung #1: Habe meinen Code auf Basis der Kommentare zur Frage aktualisiert, aber es gibt keine wesentlichen Verbesserungen, es sieht so aus, als ob die YouTube POST-Anfrage nur gesendet wirdeinmalgemessen an der Registerkarte „Netzwerk“.

// ==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();
    });
})();

Antwort1

Ich habe Tampermonkey noch nie verwendet, aber ich werde versuchen, Ihr Skript so zu ändern, dass dies funktioniert.

Das Problem besteht meines Erachtens darin, dass die Suchfunktion durch ein Tag gesteuert wird . Wenn man das weiß, sollte das Ziel darin bestehen, diesen Parameter in der URL so <form action=""></form>zu ändern, dass er den URL-Parameter anhängt.actionsp=CAASAhAB

DassollenTu es:

// ==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);
})();

Wenn es nicht funktioniert, müssen Sie das Absenden des Formulars möglicherweise wie folgt abfangen: Pseudocode basierend auf diesemStack Overflow-Antwort:

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

Oder eine leichte Variante basierend auf diesem anderenStack Overflow-Antwort

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();
});

verwandte Informationen