Закрыть всплывающее окно с задержкой (действительно диалоговое окно с моделью всплывающего окна) с помощью Tampermonkey - PullRequest
1 голос
/ 20 сентября 2019

Я пытаюсь закрыть всплывающее окно модели, которое появляется через 60 минут, если вкладка rockradio.com находится в фоновом режиме.

Я создал этот скрипт и добавил его в Tampermonkey:

// ==UserScript==
// @name         Don't bug me, Rockradio
// @namespace    http://www.rockradio.com
// @description  Closes the "Are you still there?" dialog box
// @include      https://www.rockradio.com/*
// @exclude      https://www.rockradio.com/login
// @grant        none
// @run-at context-menu
// @version      1.0
// ==/UserScript==
/* jshint -W097 */
'use strict';

setInterval(function() {
    var modal = document.getElementById('modal-region');
    if (typeof(modal) !== 'undefined' && modal !== null && modal.children.length !== 0) {
        document.querySelectorAll("button[type='button']")[1].click();
    }
}, 1000);

Но это всплывающее окно:

bad pop

не закрывается, когда я щелкаю правой кнопкой мыши: страница -> Tampermonkey -> имя скрипта.
Также нет ошибок;так что понятия не имею, что не так.

1 Ответ

0 голосов
/ 21 сентября 2019

Не проверено, так как я не собираюсь запускать этот сайт час или более, но:

Несколько вещей (от большого до малого):

  1. Не использовать @run-at context-menu для этого см. документ .
  2. Этот селектор кнопок проблематичен и может не вызывать то, что вам нужно.
  3. Простой вызов .click() может не бытьдовольно.Вам может понадобиться больше или разные события для этого ответа .
  4. Вы не сказали, какой браузер вы использовали, но разные браузеры (и версии этих браузеров) по-разному обрабатывают фоновые вкладки.
  5. jshint больше не относится к Tampermonkey.При необходимости вы будете использовать директивы ESLint.

Итак, попробуйте следующее.Если это не работает, проверьте журналы и настройте способ доставки событий мыши, согласно связанному ответу.:

// ==UserScript==
// @name         Rockradio, Don't bug me
// @description  Closes the "Are you still there?" dialog box
// @include      https://www.rockradio.com/*
// @exclude      https://www.rockradio.com/login
// @grant        none
// @noframes
// @version      1.1
// ==/UserScript==
/* eslint-disable no-multi-spaces */
'use strict';

setInterval (function () {
    const modal = document.getElementById ('modal-region');
    if (modal  &&  modal.children.length !== 0) {
        console.log ("Model found.");
        const closeBtn = modal.querySelector ("button.close");
        if (closeBtn) {
            closeBtn.click ();  //  May need dispatch and/or other events.
            console.log ('Close button "clicked".');
        }
        else {
            console.log ("Close button not found.");
        }
    }
}, 1000);
...