这是我的警报功能,显示警告信息:
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");
}
这个函数用于在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;我想将此参数添加到上面的代码中。
如果用户在我的代码中在FF浏览器文本框中键入了超过20个characetrs,我如何触发弹出功能?我想在5分钟后重置时间并再次开始计数?
https://developer.mozilla.org/en/NsIAlertsService https://developer.mozilla.org/en/Code_snippets/Alerts_and_Notifications来自这些链接,我无法找到符合我要求的脚本。
请建议我解决我的问题。 谢谢你们。
答案 0 :(得分:1)
5天后,我找到了解决问题的方法。
实际代码缓冲userContent(即,如果用户在FF浏览器文本框或文本区域中键入内容),所有内容都将被放入缓冲区内存中 &安培;这将被存储,直到用户关闭当前文本区域或文本框。 如果用户打开一个新的文本框或一个新的文本区域&键入一些新的userContent将存储在缓冲区内(旧的缓冲区将被删除)。
这个想法对于我的问题非常简单(我在开始时无法深入思考):
函数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;
}
这告诉浏览器检测用户正在输入内容并将其传递给fillText(节点)。这叫我的其他功能
fillText : function (node) to fill the values(texts)
。
检查userContent变量的值长度,以便在用户达到指定的数字值时触发我的警报。
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");
}
以下是完整代码:
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;
}
注意:
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.