如何用 js 触发谷歌翻译网站的"交换语言"按钮的 onmousedown 啊?

2020-08-23 18:18:43 +08:00
 sarvatathagata

我只会用x.click()触发一个 onclick,但是 jQuery 的jQuery('.swap').mousedown()貌似不管用,不知道为什么。(谷歌翻译没有用 jQuery,是我在控制台里导入的 jQuery )。

这个按钮的确是使用 mousedown 触发的,因为我从控制台里把它的 mousedown 的最后一个 Event Listener 删掉之后手动点击就没有反应了。

尝试使用过原生 js 的document.createEvent,然后再dispatchEvent,但是也貌似不管用。

百度翻译的交换语言按钮就可以很正常地触发。

2312 次点击
所在节点    JavaScript
14 条回复
ijrou
2020-08-23 18:35:25 +08:00
trigger,不知道是不是楼主想要的。。。
当然,我也没明白楼主想要什么功能,可能我没接触到过吧
sarvatathagata
2020-08-23 18:39:31 +08:00
@ijrou jQuery('.swap').trigger("mousedown");也没用
ijrou
2020-08-23 19:21:54 +08:00
先确定 jQuery('.swap') 选择到的是否是你要操作的元素,数组的话就取对应的元素,然后再 trigger,如果无聊,那么建议你查看你这个元素上是否绑定了 mousedown 事件,要么就是选择错了元素,要么是这个选择的元素没有 mouedown,要么你要触发的事件的逻辑压根不在 mousedown 上;
mchl
2020-08-23 19:56:55 +08:00
document.querySelector(‘.swap’).click()
sarvatathagata
2020-08-23 20:03:43 +08:00
@mchl 都说了 click 没用了,别 click 了,这个元素压根就没有 click 的 event listener,只有 mousedown
sarvatathagata
2020-08-23 20:05:22 +08:00
现在自己调试了一下,发现 getEventListeners(jQuery('.swap')[0]).mousedown[0].listener()直接调用时 Ug 函数的 a 参数没有 h 属性(这个 h 应该是一个 MouseEvent ),所以会失败,多半是因为直接调用 mousedown 时没有生成正确的 MouseEvent
sarvatathagata
2020-08-23 20:19:37 +08:00
尝试使用
let event=document.createEvent('MouseEvents');
event.initMouseEvent('mousedown',true,false,document.defaultView,0,279,179,207,80,false,false,false,false,0,null);
node.dispatchEvent(event);

现在生成的 MouseEvent 与人生成的没有任何区别,除了 isTrusted 是 false 之外。还是没有用。可能谷歌翻译就是不允许脚本点击这个交换按钮吧。
musi
2020-08-23 20:56:21 +08:00
@sarvatathagata 刚研究了一下,需要先触发 mousedown 再触发 mouseup,其实分析一下请求就不难发现 mousedown 这一步是没有请求发出去的
sarvatathagata
2020-08-23 21:17:32 +08:00
@musi 谢谢,能否详细解释一下如何先触发 mousedown 再 mouseup ?我都触发了还是没用
musi
2020-08-23 21:36:44 +08:00
@sarvatathagata 安装你上面的方法同时创建 mousedown event 和 mouseup event,然后先 dispatch mousedown 再 dispatch mouseup
musi
2020-08-23 21:40:46 +08:00
@sarvatathagata 就 copy 一下你的代码实现一下吧
```
let down=document.createEvent('MouseEvents'), up=document.createEvent('MouseEvents');
down.initMouseEvent('mousedown',true,false,document.defaultView,0,279,179,207,80,false,false,false,false,0,null);
up.initMouseEvent('mousedown',true,false,document.defaultView,0,279,179,207,80,false,false,false,false,0,null);
node.dispatchEvent(down);
setTimeout(() => node.dispatchEvent(up), 300);
```
sarvatathagata
2020-08-23 22:13:30 +08:00
楼上正解,亲测有效,再次表示感谢。
musi
2020-08-23 22:47:06 +08:00
@musi up 这里的 mousedown 改为 mouseup 手速快了没注意😂
volvo007
2020-08-24 10:00:54 +08:00
楼上正解

最近正在学 js,特别提到有些页面按钮元素并没有设置 .click 方法,所以 .click 无效
需要绑定一个 mouse 事件才行,但自己还没有实践过,谢谢楼上大佬指点

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/700740

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX