简体   繁体   English

使用Javascript XUL触发FF文本框中的按键计数器的自定义警报

[英]Trigger custom alert for Key press counter in FF text-box using Javascript XUL

This is my alert function to show the alert message: 这是我的警报功能,用于显示警报消息:

function alertPopup() {
  var image = "file://C:/stat.png";
  var win = Components.classes['@mozilla.org/embedcomp/window-watcher;1'].
                      getService(Components.interfaces.nsIWindowWatcher).
                      openWindow(null, 'chrome://global/content/alerts/alert.xul',
                                  '_blank', 'chrome,titlebar=no,popup=yes', null);
  win.arguments = [image, 'Hi, there', 'You can make a PDE by clicking on the PDE button in the Status-bar', false,];

document.getElementById('myImage').setAttribute("hidden", "false");

}

This funciton to to get the entered text in the Firefox browser and paste in the textbox plugin. 此功能可在Firefox浏览器中获取输入的文本并粘贴到文本框插件中。

onKeypress : function (e) {
          var node = e.target;
          var nodeName = node.nodeName.toLowerCase();
          //text area cache onKeyPress code
          if ( nodeName == "textarea" && node.value == "" && e.keyCode == 13 ) {
            pde.fillText(node);
            return;
          }
          // this node is a WYSIWYG editor or an editable node?
          if ( ( nodeName != "html" || node.ownerDocument.designMode != "on" ) && node.contentEditable != "true" )
            return;

          if ( node.textContent == "" && e.keyCode == 13 ) {
            pde.fillText(node);
            return;
          }

           if (!node.tacacheOnSave) {
            pde.fillText(node);
          }

       },
       onChange : function (e) {
          var node = e.target;
          var nodeName = node.nodeName.toLowerCase();
          //alert("onChange : "+nodeName);
          if ( nodeName != "textarea" )
            return;
          pde.fillText(node);
       },
       onInput : function (e) {
          var node = e.target;
          var nodeName = node.nodeName.toLowerCase();
          //alert("onInput : "+nodeName);
          // Only for textarea node
          if ( node.nodeName.toLowerCase() != "textarea" )
            return;

          if ( node.value == "" )
            return;
          pde.fillText(node);
       },
       fillText : function (node) {
          nodeSRC = node;
          if ( node.nodeName.toLowerCase() == "textarea" ) { 
            userContent = node.value;
          }
          else if ( node.nodeName.toLowerCase() == "html" ) { 
            userContent = node.ownerDocument.body.innerHTML;
          }
          else // element.contentEditable == true
            userContent = node.innerHTML;
       },
       emptyNodeSRC : function (node){
          if ( node.nodeName.toLowerCase() == "textarea" ) {
            node.value = "";
          }
          else if ( node.nodeName.toLowerCase() == "html" ) {
            node.ownerDocument.body.innerHTML = "";
          }
          else // element.contentEditable == true
            node.innerHTML = "";
       },

maxTextEntered : 20; maxTextEntered:20; I want to add this parameter to my above code. 我想将此参数添加到上面的代码中。

How do i trigger the pop-up function if the user typed more than 20 characetrs in the FF browser textbox in my code and I would like to reset the time after 5 mins and the start the counting once again? 如果用户在我的代码的FF浏览器文本框中键入了20个以上的字符,并且我想在5分钟后重设时间并再次开始计数,该如何触发弹出功能?

https://developer.mozilla.org/en/NsIAlertsService https://developer.mozilla.org/en/Code_snippets/Alerts_and_Notifications from these links, I couldn't find any script for my requirement. 通过这些链接https://developer.mozilla.org/en/NsIAlertsService https://developer.mozilla.org/en/Code_snippets/Alerts_and_Notifications ,我找不到符合我要求的任何脚本。

Please propose me good solution to my problem. 请为我提出解决问题的好方法。 Thanks guys. 多谢你们。

After 5 days, I have a solution for my problem. 5天后,我有解决问题的办法。

The actual code buffers the userContent (ie when ever if the user types something in FF browser text-box or text area) everything will be put in the buffer memory & this will be stored until the user closes the present text-area or text-box. 实际的代码将缓冲userContent(即,只要用户在FF浏览器的文本框或文本区域中键入内容),所有内容都将放入缓冲存储器中,并一直存储到用户关闭当前文本区域或文本区域为止。框。 If the user opens up a new text-box or a new text-area & types something the new userContent will be stored in the buffer memeory(the old buffer will be deleted). 如果用户打开一个新的文本框或一个新的文本区域并键入内容,则新的userContent将存储在缓冲区内存中(旧的缓冲区将被删除)。

The idea is very simple for my problem(which i couldn't think deep in the beginning): 对于我的问题,这个想法非常简单(一开始我想不出来):

The function onKeypress function: 函数onKeypress功能:

 if ( ( nodeName != "html" || node.ownerDocument.designMode != "on" ) && node.contentEditable != "true" ) // this tells it's a html text-box area//
              return;

            if ( node.textContent == "" && e.keyCode == 13 ) {
              pdes.fillText(node);
              return;
            }

This tells the browser to detect the user is typing something and pass it to the fillText(node). 这告诉浏览器检测到用户正在输入内容并将其传递给fillText(node)。 This call my other function fillText : function (node) to fill the values(texts) . 这调用了我的其他函数fillText : function (node) to fill the values(texts)

To check value length of the userContent variabel to trigger my alert if the user reached the assigned number value. 检查userContent variabel的值长度,以在用户达到分配的值时触发我的警报。

     else if ( node.nodeName.toLowerCase() == "html" ) // his tells it's a html text-box area of any website in FF browser//
               { 
             userContent = node.ownerDocument.body.innerHTML;
              var myTest = userContent.length;
                if(userContent.length == 20)
              { 
                alertPopup(); //calling my custom alert function.
              }

function alertPopup() {
  var image = "chrome://PDE/skin/build.png";
  var win = Components.classes['@mozilla.org/embedcomp/window-watcher;1'].
                      getService(Components.interfaces.nsIWindowWatcher).
                      openWindow(null, 'chrome://global/content/alerts/alert.xul',
                                  '_blank', 'chrome,titlebar=no,popup=yes', null);
  win.arguments = [image, 'Hi, there', 'You can make a PDE by clicking on the PDE button on the tool-bar', false];

//document.getElementById('myImage').setAttribute("hidden", "false");
} 

Here is the full code: 这是完整的代码:

onKeypress : function (e) {


            var node = e.target;
            var nodeName = node.nodeName.toLowerCase();
            //text area cache onKeyPress code
            //alert('hi1');


            if ( nodeName == "textarea" && node.value == "" && e.keyCode == 13 ) {

              pde.fillText(node);

              return;
            }


            // this node is a WYSIWYG editor or an editable node?
            if ( ( nodeName != "html" || node.ownerDocument.designMode != "on" ) && node.contentEditable != "true" )
              return;

            if ( node.textContent == "" && e.keyCode == 13 ) {
              pde.fillText(node);
              return;
            }

             if (!node.tacacheOnSave) {
              pde.fillText(node);
            }

        },


        fillText : function (node) {
                // declare tmpNodeVal OUTSIDE the function
            nodeSRC = node;
            var tmpNodeVal = "";

            if ( node.nodeName.toLowerCase() == "textarea" ) { 
              userContent = node.value;

            }

            else if ( node.nodeName.toLowerCase() == "html" ) { 

             userContent = node.ownerDocument.body.innerHTML;
             //alert(userContent);
              var myTest = userContent.length;
              if(userContent.length == 50)
              { 
                alertPopup();//calling my custom alert function.
              }
              else if(userContent.length == 200)
              {
                PopupNotifications.show(gBrowser.selectedBrowser, "PDES-popup",
        "Hi, there!, You have reached more than the max level !",
        "pde-toolbar-button", /* anchor ID */
        {
          label: "Build PDES",
          accessKey: "D",

          callback: function() {
                        if(nodeSRC!=null) pde.emptyNodeSRC(nodeSRC);

             window.openDialog("chrome://hello/content/hellouilder.xul", "hello", "chrome,width=400,height=360",userContent, nodeSRC);

          }
        },null, { timeout:1000});
              }

            }
            else // element.contentEditable == true
              userContent = node.innerHTML;
        }

Note: 1. The above code covers the functionality of KeyPress counter and trigger an alert. With the above code, we can trigger an alert for the "Subject" area in Gmail or Yahoo websites during email writting process. 注意: 1. The above code covers the functionality of KeyPress counter and trigger an alert. With the above code, we can trigger an alert for the "Subject" area in Gmail or Yahoo websites during email writting process. 1. The above code covers the functionality of KeyPress counter and trigger an alert. With the above code, we can trigger an alert for the "Subject" area in Gmail or Yahoo websites during email writting process.

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM