3

入力内容に基づいてチャットテキストを変更するGoogleChrome拡張機能を作成したいと思います。ビデオの横にボタンを追加し、名前の下に電話をかけ、人のボタンを追加します。クリックすると、変更が有効になります。ページに必要以上のスクリプトを配置する必要がないので、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);
4

1 に答える 1

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);
于 2014-01-13T09:53:36.100 に答える