【问题标题】:How to send Gmail talk messages using Gmails built it method如何使用 Gmail 构建的方法发送 Gmail 谈话消息
【发布时间】:2012-04-23 00:44:32
【问题描述】:

我想创建一个 Google Chrome 扩展程序,除其他外,它将根据输入的内容修改聊天文本。我将在视频旁边添加一个按钮,呼叫,并在名称下方添加人员按钮,单击时将激活修改。我不想在页面上放置更多的脚本,所以我希望能够以 Gmail 在聊天框中按“返回”的方式发送消息。此外,我希望能够通过在聊天框中显示文本来显示聊天的两个人都在使用我的扩展程序,就像“此聊天已关闭记录”文本一样,并且如果双方都在使用它,可能会添加额外的东西聊天。我试图做的是制作一个仿文本区域,当用户“发送”它时,抓取并修改它,然后将其插入真实区域并发送新文本。我可以更改文本,但似乎无法发送...

到目前为止,我将所有内容都包含在 setInterval 中以检查聊天框是否存在并向其中添加适当的内容:

var chatBtnClone = setInterval(function() {
    if ($("body").find(".nH .NG").length > 0) {  //if chat is active

        var clone = $("body").find(".nH .NG .NJ").first();
        if (clone.children()[0].className.indexOf("chat") < 0) { //if already added my class
            var clonned = clone.clone();
            var clonnedChd = clonned.children().first();
            clonnedChd.attr("title", "Start encrypted chat");
            clonnedChd.on('click', function() {
                console.log("clicked chatBtn!"); //make sure it works
                var self = $(this);
                if (self[0].className.indexOf("chatEncX") >= 0) { //toggle button pic 
                    self.removeClass('chatEncX').addClass('chatEnc');
                    self.attr("title", "Stop encrypted chat");
                } else {
                    self.removeClass('chatEnc').addClass('chatEncX');
                    self.attr("title", "Start encrypted chat");
                }
            });
            clone.parent().prepend(clonned);
            clonned.find('.NK').removeClass("NK-Y8").addClass("chatEncX");
        }

        var chatBoxs = $('body').find(".nn .AD");
        var chatArea = chatBoxs.first().find(".nH textarea"); //get chat textareas
        if (chatArea.length === 1) {
            var clonChatArea = chatArea.first().clone();
            clonChatArea.removeAttr("id");
            chatArea.first().parent().append(clonChatArea);
            // chatArea.first().hide();
            var chatTextDiv = chatBoxs.first().find(".jp .nH .nH").first();
            clonChatArea.focusin(function() {
                chatTextDiv.removeClass("gv").addClass("f7");
            });
            clonChatArea.focusout(function() {
                chatTextDiv.removeClass("f7").addClass("gv");
            });
            clonChatArea.on('keyup', function(event) {
                var self = this;
                //console.log(this.style.height); //make sure height it working

                if (self.scrollHeight === 38) {
                    self.style.overflowY = "hidden";
                    self.style.height = "36px";
                } else if (self.scrollHeight === 47) {
                    self.style.height = "54px";
                } else if (self.scrollHeight === 62) {
                    self.style.height = "72px";
                } else if (self.scrollHeight >= 77) {
                    self.style.height = "80px";
                    self.style.overflowY = "scroll";
                }

                if( event.keyCode === 13 && event.shiftKey ){
                    //regular, just insert a newline
                } else if (event.keyCode === 13) {
                    //grab text and modify then reinsert into real textarea
                    var chatTxt = $(this).val();
                    var chatHidden = chatBoxs.first().find(".nH textarea").first();
                    var chatEncTxt = Crypto.AES.encrypt(chatTxt, "pass"); //modify text
                    //console.log(chatEncTxt);
                    chatHidden.val(chatEncTxt);
                    chatHidden.focus();
                    chatHidden.trigger({ type : 'keypress', which : 13 }); //try to imitate the return key and send (NOT WORKING!!!)
                    // $(this).focus();
                }
            });
        }
    }
},150);

【问题讨论】:

  • 是的,我发现 Gmail 使用 comet 进行聊天。而且我查看了 Gmail 的脚本,但它们太混乱了,无法使用。我尝试模仿“return”键来发送消息,但无法正常工作。
  • 为了我们可以帮助您,请说明您已经完成了多远,您面临的具体问题,以及显示您正在尝试的代码的 sn-p。欢迎来到 StackOverflow :) 如果您想了解如何提出好的问题,请阅读 FAQ
  • 好的,谢谢您的建议。我编辑了我原来的问题,更加澄清并更改了我的扩展,或多或少地做同样的事情。我还添加了我已经拥有的代码 sn-ps。
  • 你也可以尝试对 JS 进行逆向工程

标签: javascript google-chrome-extension gmail


【解决方案1】:

这可能有点晚了,但如果其他人有兴趣,那么我通过以下操作来解决这个问题:

var e = new Event("keypress");
e.keyCode = e.which = 13;
// :mc is an example textarea id, but the OP has the code for finding that already
document.getElementById(':mc').dispatchEvent(e);

【讨论】:

  • 这可能行得通,但自从我提出这个问题后,Gmail 发生了很大变化。就像现在聊天在 iframe 中,甚至不是 textareas,因此,我找不到实际处理事件的节点,所以我不知道这是否有效。
  • 我也一直在努力!该代码仍然适用于现在用于 gmail 的
    。但是,您现在需要在每个 iframe 中加载脚本
猜你喜欢
  • 2020-07-12
  • 2017-03-03
  • 2016-05-29
  • 1970-01-01
  • 2014-08-19
  • 2015-11-19
  • 2016-05-19
  • 1970-01-01
  • 2015-12-23
相关资源
最近更新 更多