Tampermonkey를 사용하여 지속적으로 일치하는 URL에 특정 문자열을 추가하는 방법은 무엇입니까? 아니면 다른 방법인가요?

Tampermonkey를 사용하여 지속적으로 일치하는 URL에 특정 문자열을 추가하는 방법은 무엇입니까? 아니면 다른 방법인가요?

이 문자열을 추가하고 싶습니다.

&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>. 이를 아는 목표는 actionURL에서 해당 매개변수를 수정하여 sp=CAASAhABURL 매개변수를 추가하는 것입니다.

이것~해야 한다해:

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

작동하지 않으면 다음과 같이 양식 제출을 가로챌 수 있습니다. 이를 기반으로 한 의사 코드스택 오버플로 답변:

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

또는 이것에 기초한 약간의 변형스택 오버플로 답변

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

관련 정보