我正在撰写Chrome扩展程序,我正在尝试以编程方式触发您在Facebook聊天中输入的textarea
元素上的按键事件。
如果我查看检查器中的元素,我可以看到它设置了onkeydown
处理程序:
onkeydown="run_with(this, ["legacy:control-textarea"], function() {TextAreaControl.getInstance(this)});"
- 但我无法触发它。在试图弄清楚为什么我无法触发它时,我发现当我使用其中一个类选择元素并在控制台中键入document.querySelector('._552m').onkeydown
时,它会出现null
。同样,在getAttribute
上使用onkeydown
会出现null
。
我在这里缺少什么?我怎样才能得到这个事件处理程序?为什么我可以在检查器中的元素上看到它设置但是不能以通常的方式以编程方式访问它? React在这里拉出了一些奇怪的魔法吗?
修改:document.querySelector('._552m').attributes
显示列出的onkeydown
属性.... wtf ...
答案 0 :(得分:0)
如果document.querySelector('._552m').attributes
显示onkeydown
属性,您应该能够使用document.querySelector('._552m').getAttribute('onkeydown')
访问事件处理程序(它适用于我,在我的脸书页面上返回):
"run_with(this, ["legacy:control-textarea"], function() {TextAreaControl.getInstance(this)});"
否则,由于属性对象只是NamedNodeMap,您可以使用getNamedItem('onkeydown')
上的document.querySelector('._552m').attributes
来访问它,如下所示:
var elm = document.querySelector('._552m')
elm.attributes.getNamedItem('onkeydown') //returns the attr itself
elm.attributes.getNamedItem('onkeydown').value //returns the string value