如何将文本框设置为通过 JavaScript 添加的文本除外(Twitch 电视聊天)

How to get text boxes to except text added through JavaScript (Twitch TV chat)

所以,我正在尝试为 Twitch.tv 聊天编写一个简单的命令聊天机器人,但我似乎无法让它实际提交我添加的文本。虽然我可以用 JavaScript 添加文本和 "click" 发送按钮,但它实际上不会提交它。

比如我可以用http://www.twitch.tv/example来测试一下。显然,在 Stack Overflow 上将 link 发送到站点并不是好的做法,但我不知道还能做什么。我无法在 JS Fiddle 中重现问题,因为我不知道到底是什么问题。

我可以使用 Chrome 控制台让这些元素看起来正常工作:

//finding the textbox
var textbox = document.getElementsByClassName("chat_text_input mousetrap ember-view ember-text-area")[0];
//then assign some text to it.
textbox.value = "Hello, World.";

这很好用,文本出现了。

//to send it I should merely find a way to click the "send" button
var send = document.getElementsByClassName("button primary float-right send-chat-button")[0];
send.click();

好吧,这真的行不通。如果我在文本框中键入或使用字符(如 shift),或者我自己单击按钮,它只会实际提交文本。因此,据我了解,当我实际键入并单击时会触发某种事件。不幸的是,我不明白如何通过控制台 find/trigger 此事件。这就是我想做的。

最好我想在纯 JavaScript 中执行此操作,但我相信在 jQuery 中可能更简单。如果它绝对必须是 jQuery 那没关系,我只需要接受并学习。

附带说明一下,我能够成功地将其用于 YouTube 直播聊天(当然,元素已更改)。然而,其他几个网站的聊天反应与 Twitch 类似。其中包括网络 Skype。

过去几个小时我一直在研究 Ember 和 Javascript 来解决这个问题。我也 运行 遇到了一个问题,我必须点击进入聊天区域或发送按钮本身。

我以为我有一个为 Twitch Plays Pokemon 制作的脚本的线索,该脚本可以将预设消息发送到聊天中。它使用 Jquery 将值输入文本区域并单击发送按钮,但这不再有效,因为 Twitch 现在使用 Emberjs 2

我不太熟悉 Ember 框架,但 Twitch 似乎使用了一个 Textarea 组件(在 Ember 术语中),它将一些框架特定的 API 关联到 Textarea HTML 元素。

由于 Twitch webapp 是用 Ember 编写的,因此使用 vanilla javascript 设置文本框的值似乎不会通知 属性 更改为任何观察者内部注册到 Ember

解决方法是通过 Ember 内部方法更改值 属性。幸运的是,浏览与 Textarea DOM 元素关联的视图可以访问 set 方法。 http://www.ember-doc.com/classes/Ember.TextArea.html#method_set

Ember.view.views 在 Ember 2 之前工作但已弃用,现在需要查找

App.__container__.lookup('-view-registry:main')[document.querySelector(".chat_text_input").id].set("value","test");
document.querySelector(".chat-interface__submit").click();