Букмарклет для имитации нажатия кнопки в сервисе Google iframe

Цель состоит в том, чтобы добавить сочетания клавиш в Google Google Translator Toolkit. У большинства функций есть сочетания клавиш, но у этих двух нет.

Первая функция называется Merge Down. Он срабатывает правильно, когда выполняется этот букмарклет:

javascript:document.evaluate("//div[(@id='gtc-merge-arent')]/div[(@class='modal-dialog
gtc-merge')]/div[(@class='modal-dialog-buttons')]/button[(text()='OK')]",    document, null, XPathResult.FIRST_ORDERED_NODE_TYPE,
null).singleNodeValue.click();

Функция "Применить ко всем" сложнее. Обычно вы должны нажать три раза, чтобы выполнить эту функцию:

# 1 нажать кнопку, которая делает видимым диалоговое окно "Повторения" и задает параметры: чем заменить чем.
# 2 нажать "Применить ко всем" и вызвать фактическую замену во всем
#3, чтобы скрыть элемент диалога.

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

# 2 и #3 стреляют достаточно легко: тот же букмарклет с паузой:

javascript:(function(pause) { 
document.evaluate("//div[(@id='fnrDialogParent')]/div[(@class='modal-dialog gtc-rep-modal-dialog')]/div[(@class='modal-dialog-buttons')]/button[(text()='Apply to all')]", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.click();
setTimeout(() => document.evaluate("//div[(@id='fnrDialogParent')]/div[(@class='modal-dialog gtc-rep-modal-dialog')]/div[(@class='modal-dialog-buttons')]/button[(text()='Exit')]", document, null, XPathResult.FIRST_ORDERED_NODE_TYPE, null).singleNodeValue.click(), pause) 
            })(400);

Я не могу смоделировать нажатие на кнопку "Повторения", которая должна появиться с двумя кнопками, которые нужно нажать, чтобы завершить работу. Сама кнопка - это div с img внутри iframe. Я испробовал большинство методов, которые я нашел здесь, для симуляции кликов, последний из которых был этим, но он все равно не работает (ссылки приняты правильно)

var ifrm = document.querySelectorAll('iframe')[2];<br> 
$(ifrm).contents().find('img.jfk-button-img.gtc-img-rep').click();

(Сама кнопка - это div с img внутри. В зависимости от того, повторяется ли сегмент в другом месте или нет, кнопка либо -enabled, либо -disabled. Вот HTML-код для включенной кнопки:

<div role="button" class="goog-inline-block jfk-button jfk-button-standard jfk-button-narrow jfk-button-collapse-left jfk-button-collapse-right jfk-button-clear-outline" tabindex="0" id="goog-gtc-repbutton" aria-label="Repeated: 3" data-tooltip="Repeated: 3" style="user-select: none;"><img src="./images/cleardot.gif" class="jfk-button-img gtc-img-rep" style="width: 21px; height: 21px;"></div>

1 ответ

javascript: (function() {
    const a = f => new MouseEvent(f, { bubbles: !0 }),
        b = f => () => document.querySelector(f).click(),
        c = f => `#fnrDialogParent .gtc-rep-modal-dialog .modal-dialog-buttons button[name=${f}]`,
        d = { imgSel: (f => () => {
                const g = a('mousedown'),
                    h = a('mouseup'),
                    i = document.querySelector(f);
                i.dispatchEvent(g), i.dispatchEvent(h) })('img.jfk-button-img.gtc-img-rep'), applyToAll: b(c('repDialogReplaceAll')), exit: b(c('repDialogExit')) };
    d.imgSel(), d.applyToAll(), d.exit() })();

Это букмарклет, который отвечает на мой вопрос и выполняет 3 клика. Этот ответ предупредил меня.

Другие вопросы по тегам