Букмарклет для имитации нажатия кнопки в сервисе 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 клика. Этот ответ предупредил меня.