Javascript 使用bookmarklet单击Gmail';s";“显示原件”;按钮

Javascript 使用bookmarklet单击Gmail';s";“显示原件”;按钮,javascript,jquery,gmail,bookmarklet,Javascript,Jquery,Gmail,Bookmarklet,当我在Gmail中打开一封电子邮件时,我试图通过编程方式单击“显示原始”下拉菜单项。所有元素的ID都会随着每封电子邮件的发送而动态变化,因此这不是找到我试图单击的菜单项的可靠方法。首先,我只是想制作一段JavaScript,在Chrome的控制台中点击它。加载jQuery后,我尝试了以下方法: jQuery('div[role=menuitem]:contains(Show original)').click(); 虽然它似乎选择了正确的div并单击它,但这并不是预期的行为,而且单击实际上没有

当我在Gmail中打开一封电子邮件时,我试图通过编程方式单击“显示原始”下拉菜单项。所有元素的ID都会随着每封电子邮件的发送而动态变化,因此这不是找到我试图单击的菜单项的可靠方法。首先,我只是想制作一段JavaScript,在Chrome的控制台中点击它。加载jQuery后,我尝试了以下方法:

jQuery('div[role=menuitem]:contains(Show original)').click();
虽然它似乎选择了正确的div并单击它,但这并不是预期的行为,而且单击实际上没有任何作用。下面是一个完整加载的电子邮件菜单,其中包含我想用JavaScript单击的菜单项:

<div class="J-N" role="menuitem" aria-hidden="false" id="so" style="-webkit-user-select: none;"><div class="J-N-Jz"><div><div id=":173" class="cj" act="32"><img class="dS J-N-JX" src="images/cleardot.gif" alt="">Show original</div></div></div></div>
显示原件


我打算使用bookmarklet,但由于安全警告,在bookmarklet中加载jQuery时遇到了问题,但这是另一个问题。另外,我应该在点击“显示原创”按钮之前打开下拉列表,还是我可以在不首先打开菜单的情况下点击此按钮?

您必须至少打开一次菜单,以便Gmail加载所需的菜单元素

要单击元素,请直接在DOM元素上使用
dispatchEvent()
(不是jQuery集合)

基本示例可能如下所示:

// Create events
var mouseDownEvent = new MouseEvent('mousedown', { 'bubbles': true });
var mouseUpEvent = new MouseEvent('mouseup', { 'bubbles': true });

// Get DOM elements
var menu = jQuery("div[role='button'][aria-label='More']").get(0);
var button = jQuery("div[role='menuitem']:contains('Show original')").get(0);

// Open and close menu, to ensure button existence
menu.dispatchEvent(mouseDownEvent);
menu.dispatchEvent(mouseDownEvent);

// Click menu item
button.dispatchEvent(mouseDownEvent);
button.dispatchEvent(mouseUpEvent);

这只适用于Chrome、Firefox和Opera。

我尝试使用您的代码制作一个bookmarklet:
javascript:var mouseDownEvent=new MouseEvent('mousedown',{'bubbles':true});var mouseUpEvent=newmouseevent('mouseup',{'bubbles':true});var menu=jQuery(“div[role='button'][aria label='More']”)。获取(0);var button=jQuery(“div[role='menuitem']:contains('Show original')”)。获取(0);菜单.dispatchEvent(mouseDownEvent);菜单.dispatchEvent(mouseDownEvent);按钮。dispatchEvent(mouseDownEvent);按钮。dispatchEvent(mouseUpEvent)
但是当我点击书签时什么也没发生。我做错什么了吗?谢谢你,从最初的问题开始已经三年多了。据我所知,谷歌完全重新设计了Gmail界面——毫不奇怪bookmarklet不再工作。我不再使用Gmail了,所以不打算更新我的答案。好的。谢谢你的回复!