Bookmarklet用于模拟Google服务iframe中的按钮点击

时间:2016-12-24 04:49:18

标签: javascript jquery shortcut bookmarklet google-translator-toolkit

目标是为Google的Google Translator Toolkit添加键盘快捷键。大多数功能都有键盘快捷键,但这两个功能都没有。

第一个函数叫做Merge Down。执行此bookmarklet时,它会正确触发:

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 点击“适用于所有人”#39;并在整个过程中触发实际更换  #3 隐藏对话框元素。

我不想搞砸谷歌的内部代码,所以正常点击就像用鼠标一样最好。

#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,在iframe中有一个img。我尝试了我在这里找到的用于点击模拟的大多数方法,最新的是this one,但它并没有完全相同(引用正确)

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

(按钮本身是一个内置img的div。根据段是否在其他地方重复,按钮是-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 个答案:

答案 0 :(得分:0)

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次点击的书签。 This answer tipped me off