技术解析

如何用 js 触发谷歌翻译网站的"交换语言"按钮的 onmousedown 啊?
0
2021-08-13 15:44:24
idczone

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

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

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

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


trigger,不知道是不是楼主想要的。。。
当然,我也没明白楼主想要什么功能,可能我没接触到过吧

jQuery('.swap').trigger("mousedown");也没用

先确定 jQuery('.swap') 选择到的是否是你要操作的元素,数组的话就取对应的元素,然后再 trigger,如果无聊,那么建议你查看你这个元素上是否绑定了 mousedown 事件,要么就是选择错了元素,要么是这个选择的元素没有 mouedown,要么你要触发的事件的逻辑压根不在 mousedown 上;

document.querySelector(‘.swap’).click()

都说了 click 没用了,别 click 了,这个元素压根就没有 click 的 event listener,只有 mousedown

现在自己调试了一下,发现 getEventListeners(jQuery('.swap')[0]).mousedown[0].listener()直接调用时 Ug 函数的 a 参数没有 h 属性(这个 h 应该是一个 MouseEvent ),所以会失败,多半是因为直接调用 mousedown 时没有生成正确的 MouseEvent

尝试使用
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 之外。还是没有用。可能谷歌翻译就是不允许脚本点击这个交换按钮吧。

刚研究了一下,需要先触发 mousedown 再触发 mouseup,其实分析一下请求就不难发现 mousedown 这一步是没有请求发出去的

谢谢,能否详细解释一下如何先触发 mousedown 再 mouseup ?我都触发了还是没用

安装你上面的方法同时创建 mousedown event 和 mouseup event,然后先 dispatch mousedown 再 dispatch mouseup

就 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);
```

楼上正解,亲测有效,再次表示感谢。

up 这里的 mousedown 改为 mouseup 手速快了没注意
数据地带为您的网站提供全球顶级IDC资源
在线咨询
专属客服