скрипт tampermonkey запускается на нескольких страницах - PullRequest
1 голос
/ 11 марта 2020

Это пример того, что я хотел бы сделать. Всякий раз, когда мы находимся на целевом URL, то есть stackoverflow, чтобы появиться липкий колонтитул внизу с кнопками. Одной из кнопок для ввода чего-либо в поиск отправьте форму. После этого он ожидает загрузки страницы и делает что-то на странице, которая только что загрузилась, т.е. нажимает на первую ссылку.

Я обнаружил, что это невозможно, просто нажав на кнопку после отправки, потому что фреймы изменение страницы или что-то в этом роде, как можно было бы сделать это с помощью tampermonkey.

// ==UserScript==
// @name         New Userscript
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       You
// @match        https://stackoverflow.com/
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    $('body').append('<div id="test"><p><button onclick="myFunction()">Click me</button></p></div>');
    $('body').append(
        `<script type="text/javascript">
             function myFunction() {
                 // page 1
                 document.querySelector('#search > div > input').value="tampermonkey";
                 document.forms[0].submit();

                 // page 2 (DOEST WORK)
                 document.querySelector('#question-summary-29592068 > div.summary > div.result-link > h3 > a');
             }
         </script>`
    );

    $('#test').css({'position': 'fixed',
                   'left': '0',
                   'bottom': '0',
                   'width': '100%',
                   'background-color': 'red',
                   'color': 'white',
                   'text-align': 'center',
                   'z-index':'1'
                  });

})();

1 Ответ

1 голос
/ 11 марта 2020

Одна из причин, по которой ваш скрипт может не работать, заключается в том, что в верхней части скрипта написано:

// ==UserScript==
// @name         New Userscript
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       You
// @match        https://stackoverflow.com/
// @grant        none
// ==/UserScript==


// @match соответствует только на домашней странице stackoverflow.com, которая не работает. включите страницу поиска, чтобы @match был // @match https://stackoverflow.com/*, что соответствует домашней странице и странице поиска. Вы также должны сделать так, чтобы «Нажмите меня!» Кнопка отображается только на главной странице с помощью оператора if. Я тоже полностью решил твою проблему, если хочешь.

// ==UserScript==
// @name         New Userscript
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       You
// @match        https://stackoverflow.com/*
// @grant        none
// ==/UserScript==

window.onload = function() {
    'use strict';
    if (location.href == "https://stackoverflow.com/search?q=tampermonkey") {
        alert(document.querySelector('#question-summary-29592068 > div.summary > div.result-link > h3 > a'));
    }else {
        $('body').append('<div id="test"><p><button onclick="myFunction()">Click me</button></p></div>');
        $('body').append(
            `<script type="text/javascript">
                 function myFunction() {
                     // page 1
                     document.querySelector('#search > div > input').value="tampermonkey";
                     document.forms[0].submit();
                 }
            </script>`
        );

        $('#test').css({
            'position': 'fixed',
            'left': '0',
            'bottom': '0',
            'width': '100%',
            'background-color': 'red',
            'color': 'white',
            'text-align': 'center',
            'z-index':'1'
        });
    }

};
...