邓华

BlogJava 联系 聚合 管理
  48 Posts :: 0 Stories :: 149 Comments :: 0 Trackbacks

#

这回碰到的情况是prototype.js产生的序列化字符串传递到后台后,乱码的问题。

环境: prototype-1.4.0.js,gb2312编码的jsp ,后台:Linux 2.6.9, resin2., resin的启动参数加了 -Dfile.encoding=ISO-8859-1


在网页提交参数的时候。 用了:

var myAjax = new Ajax.Request(url, {method: 'post', parameters: Form.serialize($('converge')),onComplete: showResponse,onLoaded:doing,onLoading:doing});


其中Form.serialize($('converge')),是把converge表单中所有的字段,拼成method=xxx&type=sss的形式, 在prototype的函数中,会把key和value分别用encodeURIComponent 来把一个字符串转成utf-8的URL编码形式.

比如,“中文”会被编码成:%E4%B8%AD%E6%96%87

但该字符串传到后台时,会被识别成乱码. 用request.getParameter取到的字符串也是乱码,而不是本身的字符。

主要原因是%号,如果该串改成%22E4%22B8%22AD%22E6%2296%2287 也是可以识别的. 

解决方法: 在prototype文件中找到 encodeURIComponent  这段, 在encodeURIComponent 后,再将该字符串用escape方法再编码一次。 这时候传到后台,用request.getParameter,可以得到编码后的正确的字符串。即 %E4%B8%AD%E6%96%87 .

这时,可以用java.net.URLDecoder.decode(keyword,"UTF-8");  对这个字符串进行解码,从而得到正确的中文。



posted @ 2006-11-09 09:52 邓华的碎碎念 阅读(469) | 评论 (0)编辑 收藏

     摘要: IE用一个节点的outerHTML来获得的代码,与xhtml的代码是不兼容的, 比如,标签名是大写,LI标签没有封口等。

找到一个替换的函数,用来解决这个问题。   阅读全文
posted @ 2006-10-08 11:06 邓华的碎碎念 阅读(1082) | 评论 (2)编辑 收藏

从网上收集了两个.

  /**
  * JavaScript escape/unescape 编码的 Java 实现
  * author jackyz
  * keep this copyright info while using this method by free
  */
  public class Escape {
  private final static String[] hex = {
  "00","01","02","03","04","05","06","07","08","09","0A","0B","0C","0D","0E","0F",
  "10","11","12","13","14","15","16","17","18","19","1A","1B","1C","1D","1E","1F",
  "20","21","22","23","24","25","26","27","28","29","2A","2B","2C","2D","2E","2F",
  "30","31","32","33","34","35","36","37","38","39","3A","3B","3C","3D","3E","3F",
  "40","41","42","43","44","45","46","47","48","49","4A","4B","4C","4D","4E","4F",
  "50","51","52","53","54","55","56","57","58","59","5A","5B","5C","5D","5E","5F",
  "60","61","62","63","64","65","66","67","68","69","6A","6B","6C","6D","6E","6F",
  "70","71","72","73","74","75","76","77","78","79","7A","7B","7C","7D","7E","7F",
  "80","81","82","83","84","85","86","87","88","89","8A","8B","8C","8D","8E","8F",
  "90","91","92","93","94","95","96","97","98","99","9A","9B","9C","9D","9E","9F",
  "A0","A1","A2","A3","A4","A5","A6","A7","A8","A9","AA","AB","AC","AD","AE","AF",
  "B0","B1","B2","B3","B4","B5","B6","B7","B8","B9","BA","BB","BC","BD","BE","BF",
  "C0","C1","C2","C3","C4","C5","C6","C7","C8","C9","CA","CB","CC","CD","CE","CF",
  "D0","D1","D2","D3","D4","D5","D6","D7","D8","D9","DA","DB","DC","DD","DE","DF",
  "E0","E1","E2","E3","E4","E5","E6","E7","E8","E9","EA","EB","EC","ED","EE","EF",
  "F0","F1","F2","F3","F4","F5","F6","F7","F8","F9","FA","FB","FC","FD","FE","FF"
  };
  private final static byte[] val = {
  0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
  0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
  0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
  0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
  0x3F,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
  0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
  0x3F,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
  0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
  0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
  0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
  0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
  0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
  0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
  0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
  0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,
  0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F,0x3F
  };
  public static String escape(String s) {
  StringBuffer sbuf = new StringBuffer();
  int len = s.length();
  for (int i = 0; i < len; i++) {
  int ch = s.charAt(i);
  if (ch == ' ') {            // space : map to '+'
  sbuf.append('+');
  } else if ('A' <= ch && ch <= 'Z') {  // 'A'..'Z' : as it was
  sbuf.append((char)ch);
  } else if ('a' <= ch && ch <= 'z') {  // 'a'..'z' : as it was
  sbuf.append((char)ch);
  } else if ('0' <= ch && ch <= '9') {  // '0'..'9' : as it was
  sbuf.append((char)ch);
  } else if (ch == '-' || ch == '_'    // unreserved : as it was
  || ch == '.' || ch == '!'
  || ch == '~' || ch == '*'
  || ch == '\'' || ch == '('
  || ch == ')') {
  sbuf.append((char)ch);
  } else if (ch <= 0x007F) {       // other ASCII : map to %XX
  sbuf.append('%');
  sbuf.append(hex[ch]);
  } else {                // unicode : map to %uXXXX
  sbuf.append('%');
  sbuf.append('u');
  sbuf.append(hex[(ch >>> 8)]);
  sbuf.append(hex[(0x00FF & ch)]);
  }
  }
  return sbuf.toString();
  }
  public static String unescape(String s) {
  StringBuffer sbuf = new StringBuffer();
  int i = 0;
  int len = s.length();
  while (i < len) {
  int ch = s.charAt(i);
  if (ch == '+') {            // + : map to ' '
  sbuf.append(' ');
  } else if ('A' <= ch && ch <= 'Z') {  // 'A'..'Z' : as it was
  sbuf.append((char)ch);
  } else if ('a' <= ch && ch <= 'z') {  // 'a'..'z' : as it was
  sbuf.append((char)ch);
  } else if ('0' <= ch && ch <= '9') {  // '0'..'9' : as it was
  sbuf.append((char)ch);
  } else if (ch == '-' || ch == '_'    // unreserved : as it was
  || ch == '.' || ch == '!'
  || ch == '~' || ch == '*'
  || ch == '\'' || ch == '('
  || ch == ')') {
  sbuf.append((char)ch);
  } else if (ch == '%') {
  int cint = 0;
  if ('u' != s.charAt(i+1)) {     // %XX : map to ascii(XX)
  cint = (cint << 4) | val[s.charAt(i+1)];
  cint = (cint << 4) | val[s.charAt(i+2)];
  i+=2;
  } else {              // %uXXXX : map to unicode(XXXX)
  cint = (cint << 4) | val[s.charAt(i+2)];
  cint = (cint << 4) | val[s.charAt(i+3)];
  cint = (cint << 4) | val[s.charAt(i+4)];
  cint = (cint << 4) | val[s.charAt(i+5)];
  i+=5;
  }
  sbuf.append((char)cint);
  }
  i++;
  }
  return sbuf.toString();
  }
  public static void main(String[] args) {
  String stest = "中文1234 abcd[]()<+>,.~\\";
  System.out.println(stest);
  System.out.println(escape(stest));
  System.out.println(unescape(escape(stest)));
  }
  }




===========================================================================

class  EscapeUnescape
{
 public static String  escape (String src)
 {
  int i;
  char j;
  StringBuffer tmp = new StringBuffer();
  tmp.ensureCapacity(src.length()*6);

  for (i=0;i<src.length() ;i++ )
  {

   j = src.charAt(i);

   if (Character.isDigit(j) || Character.isLowerCase(j) || Character.isUpperCase(j))
    tmp.append(j);
   else
    if (j<256)
    {
    tmp.append( "%" );
    if (j<16)
     tmp.append( "0" );
    tmp.append( Integer.toString(j,16) );
    }
    else
    {
    tmp.append( "%u" );
    tmp.append( Integer.toString(j,16) );
    }
  }
  return tmp.toString();
 }

 public static String  unescape (String src)
 {
  StringBuffer tmp = new StringBuffer();
  tmp.ensureCapacity(src.length());
  int  lastPos=0,pos=0;
  char ch;
  while (lastPos<src.length())
  {
   pos = src.indexOf("%",lastPos);
   if (pos == lastPos)
    {
    if (src.charAt(pos+1)=='u')
     {
     ch = (char)Integer.parseInt(src.substring(pos+2,pos+6),16);
     tmp.append(ch);
     lastPos = pos+6;
     }
    else
     {
     ch = (char)Integer.parseInt(src.substring(pos+1,pos+3),16);
     tmp.append(ch);
     lastPos = pos+3;
     }
    }
   else
    {
    if (pos == -1)
     {
     tmp.append(src.substring(lastPos));
     lastPos=src.length();
     }
    else
     {
     tmp.append(src.substring(lastPos,pos));
     lastPos=pos;
     }
    }
  }
  return tmp.toString();
 }

 public static void main(String[] args)
 {
  String tmp="~!@#$%^&*()_+|\\=-,./?><;'][{}\"";
  System.out.println("testing escape : "+tmp);
  tmp =escape(tmp);
  System.out.println(tmp);
  System.out.println("testing unescape :"+tmp);
  System.out.println(unescape(tmp));
 }
}

posted @ 2006-08-30 11:41 邓华的碎碎念 阅读(409) | 评论 (0)编辑 收藏


<script language="JavaScript" type="Text/JavaScript">

<!--

if(window.Event){// 修正Event的DOM

    /*

                                IE5        MacIE5        Mozilla        Konqueror2.2        Opera5

    event                        yes        yes            yes            yes                    yes

    event.returnValue            yes        yes            no            no                    no

    event.cancelBubble            yes        yes            no            no                    no

    event.srcElement            yes        yes            no            no                    no

    event.fromElement            yes        yes            no            no                    no

   

    */

    Event.prototype.__defineSetter__("returnValue",function(b){//

        if(!b)this.preventDefault();

        return b;

        });

    Event.prototype.__defineSetter__("cancelBubble",function(b){// 设置或者检索当前事件句柄的层次冒泡

        if(b)this.stopPropagation();

        return b;

        });

    Event.prototype.__defineGetter__("srcElement",function(){

        var node=this.target;

        while(node.nodeType!=1)node=node.parentNode;

        return node;

        });

    Event.prototype.__defineGetter__("fromElement",function(){// 返回鼠标移出的源节点

        var node;

        if(this.type=="mouseover")

            node=this.relatedTarget;

        else if(this.type=="mouseout")

            node=this.target;

        if(!node)return;

        while(node.nodeType!=1)node=node.parentNode;

        return node;

        });

    Event.prototype.__defineGetter__("toElement",function(){// 返回鼠标移入的源节点

        var node;

        if(this.type=="mouseout")

            node=this.relatedTarget;

        else if(this.type=="mouseover")

            node=this.target;

        if(!node)return;

        while(node.nodeType!=1)node=node.parentNode;

        return node;

        });

    Event.prototype.__defineGetter__("offsetX",function(){

        return this.layerX;

        });

    Event.prototype.__defineGetter__("offsetY",function(){

        return this.layerY;

        });

    }

if(window.Document){// 修正Document的DOM

    /*

                                IE5        MacIE5        Mozilla        Konqueror2.2        Opera5

    document.documentElement    yes        yes            yes            yes                    no

    document.activeElement        yes        null        no            no                    no

   

    */

    }

if(window.Node){// 修正Node的DOM

    /*

                                IE5        MacIE5        Mozilla        Konqueror2.2        Opera5

    Node.contains                yes        yes            no            no                    yes

    Node.replaceNode            yes        no            no            no                    no

    Node.removeNode                yes        no            no            no                    no

    Node.children                yes        yes            no            no                    no

    Node.hasChildNodes            yes        yes            yes            yes                    no

    Node.childNodes                yes        yes            yes            yes                    no

    Node.swapNode                yes        no            no            no                    no

    Node.currentStyle            yes        yes            no            no                    no

   

    */

    Node.prototype.replaceNode=function(Node){// 替换指定节点

        this.parentNode.replaceChild(Node,this);

        }

    Node.prototype.removeNode=function(removeChildren){// 删除指定节点

        if(removeChildren)

            return this.parentNode.removeChild(this);

        else{

            var range=document.createRange();

            range.selectNodeContents(this);

            return this.parentNode.replaceChild(range.extractContents(),this);

            }

        }

    Node.prototype.swapNode=function(Node){// 交换节点

        var nextSibling=this.nextSibling;

        var parentNode=this.parentNode;

        node.parentNode.replaceChild(this,Node);

        parentNode.insertBefore(node,nextSibling);

        }

    }

if(window.HTMLElement){

    HTMLElement.prototype.__defineGetter__("all",function(){

        var a=this.getElementsByTagName("*");

        var node=this;

        a.tags=function(sTagName){

            return node.getElementsByTagName(sTagName);

            }

        return a;

        });

    HTMLElement.prototype.__defineGetter__("parentElement",function(){

        if(this.parentNode==this.ownerDocument)return null;

        return this.parentNode;

        });

    HTMLElement.prototype.__defineGetter__("children",function(){

        var tmp=[];

        var j=0;

        var n;

        for(var i=0;i<this.childNodes.length;i++){

            n=this.childNodes[i];

            if(n.nodeType==1){

                tmp[j++]=n;

                if(n.name){

                    if(!tmp[n.name])

                        tmp[n.name]=[];

                    tmp[n.name][tmp[n.name].length]=n;

                    }

                if(n.id)

                    tmp[n.id]=n;

                }

            }

        return tmp;

        });

    HTMLElement.prototype.__defineGetter__("currentStyle", function(){

        return this.ownerDocument.defaultView.getComputedStyle(this,null);

        });

    HTMLElement.prototype.__defineSetter__("outerHTML",function(sHTML){

        var r=this.ownerDocument.createRange();

        r.setStartBefore(this);

        var df=r.createContextualFragment(sHTML);

        this.parentNode.replaceChild(df,this);

        return sHTML;

        });

    HTMLElement.prototype.__defineGetter__("outerHTML",function(){

        var attr;

        var attrs=this.attributes;

        var str="<"+this.tagName;

        for(var i=0;i<attrs.length;i++){

            attr=attrs[i];

            if(attr.specified)

                str+=" "+attr.name+'="'+attr.value+'"';

            }

        if(!this.canHaveChildren)

            return str+">";

        return str+">"+this.innerHTML+"</"+this.tagName+">";

        });

    HTMLElement.prototype.__defineGetter__("canHaveChildren",function(){

        switch(this.tagName.toLowerCase()){

            case "area":

            case "base":

            case "basefont":

            case "col":

            case "frame":

            case "hr":

            case "img":

            case "br":

            case "input":

            case "isindex":

            case "link":

            case "meta":

            case "param":

                return false;

            }

        return true;

        });

 

    HTMLElement.prototype.__defineSetter__("innerText",function(sText){

        var parsedText=document.createTextNode(sText);

        this.innerHTML=parsedText;

        return parsedText;

        });

    HTMLElement.prototype.__defineGetter__("innerText",function(){

        var r=this.ownerDocument.createRange();

        r.selectNodeContents(this);

        return r.toString();

        });

    HTMLElement.prototype.__defineSetter__("outerText",function(sText){

        var parsedText=document.createTextNode(sText);

        this.outerHTML=parsedText;

        return parsedText;

        });

    HTMLElement.prototype.__defineGetter__("outerText",function(){

        var r=this.ownerDocument.createRange();

        r.selectNodeContents(this);

        return r.toString();

        });

    HTMLElement.prototype.attachEvent=function(sType,fHandler){

        var shortTypeName=sType.replace(/on/,"");

        fHandler._ieEmuEventHandler=function(e){

            window.event=e;

            return fHandler();

            }

        this.addEventListener(shortTypeName,fHandler._ieEmuEventHandler,false);

        }

    HTMLElement.prototype.detachEvent=function(sType,fHandler){

        var shortTypeName=sType.replace(/on/,"");

        if(typeof(fHandler._ieEmuEventHandler)=="function")

            this.removeEventListener(shortTypeName,fHandler._ieEmuEventHandler,false);

        else

            this.removeEventListener(shortTypeName,fHandler,true);

        }

    HTMLElement.prototype.contains=function(Node){// 是否包含某节点

        do if(Node==this)return true;

        while(Node=Node.parentNode);

        return false;

        }

    HTMLElement.prototype.insertAdjacentElement=function(where,parsedNode){

        switch(where){

            case "beforeBegin":

                this.parentNode.insertBefore(parsedNode,this);

                break;

            case "afterBegin":

                this.insertBefore(parsedNode,this.firstChild);

                break;

            case "beforeEnd":

                this.appendChild(parsedNode);

                break;

            case "afterEnd":

                if(this.nextSibling)

                    this.parentNode.insertBefore(parsedNode,this.nextSibling);

                else

                    this.parentNode.appendChild(parsedNode);

                break;

            }

        }

    HTMLElement.prototype.insertAdjacentHTML=function(where,htmlStr){

        var r=this.ownerDocument.createRange();

        r.setStartBefore(this);

        var parsedHTML=r.createContextualFragment(htmlStr);

        this.insertAdjacentElement(where,parsedHTML);

        }

    HTMLElement.prototype.insertAdjacentText=function(where,txtStr){

        var parsedText=document.createTextNode(txtStr);

        this.insertAdjacentElement(where,parsedText);

        }

    HTMLElement.prototype.attachEvent=function(sType,fHandler){

        var shortTypeName=sType.replace(/on/,"");

        fHandler._ieEmuEventHandler=function(e){

            window.event=e;

            return fHandler();

            }

        this.addEventListener(shortTypeName,fHandler._ieEmuEventHandler,false);

        }

    HTMLElement.prototype.detachEvent=function(sType,fHandler){

        var shortTypeName=sType.replace(/on/,"");

        if(typeof(fHandler._ieEmuEventHandler)=="function")

            this.removeEventListener(shortTypeName,fHandler._ieEmuEventHandler,false);

        else

            this.removeEventListener(shortTypeName,fHandler,true);

        }

    }

//-->

</script>

posted @ 2006-08-02 15:15 邓华的碎碎念 阅读(327) | 评论 (0)编辑 收藏

/**
 *   兼容firefox的 outerHTML  使用以下代码后,firefox可以使用element.outerHTML
 **/

if(window.HTMLElement) {
    HTMLElement.prototype.__defineSetter__("outerHTML",function(sHTML){
        var r=this.ownerDocument.createRange();
        r.setStartBefore(this);
        var df=r.createContextualFragment(sHTML);
        this.parentNode.replaceChild(df,this);
        return sHTML;
        });

    HTMLElement.prototype.__defineGetter__("outerHTML",function(){
     var attr;
        var attrs=this.attributes;
        var str="<"+this.tagName.toLowerCase();
        for(var i=0;i<attrs.length;i++){
            attr=attrs[i];
            if(attr.specified)
                str+=" "+attr.name+'="'+attr.value+'"';
            }
        if(!this.canHaveChildren)
            return str+">";
        return str+">"+this.innerHTML+"</"+this.tagName.toLowerCase()+">";
        });
       
 HTMLElement.prototype.__defineGetter__("canHaveChildren",function(){
  switch(this.tagName.toLowerCase()){
            case "area":
            case "base":
         case "basefont":
            case "col":
            case "frame":
            case "hr":
            case "img":
            case "br":
            case "input":
            case "isindex":
            case "link":
            case "meta":
            case "param":
            return false;
        }
        return true;

     });
}


测试有效.




关于insertAdjacentHTML兼容的解新决办法

//---在组件最后插入html代码
function InsertHtm(op,code,isStart){
if(Dvbbs_IsIE5)
op.insertAdjacentHTML(isStart ? "afterbegin" : "afterEnd",code);
else{
var range=op.ownerDocument.createRange();
range.setStartBefore(op);
var fragment = range.createContextualFragment(code);
if(isStart)
op.insertBefore(fragment,op.firstChild);
else
op.appendChild(fragment);

}
}







 

关于inner/outerHTML在NC6中的参考

DOM level 1 has no methods to allow for insertion of unparsed HTML into 
the document tree (as IE allows with insertAdjacentHTML or assignment 
to inner/outerHTML).
NN6 (currently in beta as NN6PR3) know supports the 
  .innerHTML
property of HTMLElements so that you can read or write the innerHTML of 
a page element like in IE4+.
NN6 also provides a DOM level 2 compliant Range 
object to which a
  createContextualFragment('html source string')
was added to spare DOM scripters the task of parsing html and creating 
DOM elements.
You create a Range with
  var range = document.createRange();
Then you should set its start point to the element where you want to 
insert the html for instance
  var someElement = document.getElementById('elementID');
  range.setStartAfter(someElement);
Then you create a document fragment from the html source to insert for 
example
  var docFrag = 
    range.createContextualFragment('<P>Kibology for all.</P>');
and insert it with DOM methods
  someElement.appendChild(docFrag);

The Netscape JavaScript 1.5 version even provides so called setters for 
properties which together with the ability to prototype the DOM 
elements allows to emulate setting of outerHMTL for NN6:

<SCRIPT LANGUAGE="JavaScript1.5">
if (navigator.appName == 'Netscape') {
  HTMLElement.prototype.outerHTML setter =
    function (html) {
      this.outerHTMLInput = html;
      var range = this.ownerDocument.createRange();
      range.setStartBefore(this);
      var docFrag = range.createContextualFragment(html);
      this.parentNode.replaceChild(docFrag, this);
  }
}
</SCRIPT>
 
If you insert that script block you can then write cross browser code 
assigning to
  .innerHTML
  .outerHTML
for instance
   document.body.innerHTML = '<P>Scriptology for all</P>';
which works with both IE4/5 and NN6.

The following provides getter functions for 
  .outerHTML
to allow to read those properties in NN6 in a IE4/5 compatible way. 
Note that while the scheme of traversing the document tree should point 
you in the right direction the code example might not satisfy your 
needs as there are subtle difficulties when trying to reproduce the 
html source from the document tree. See for yourself whether you like 
the result and improve it as needed to cover other exceptions than 
those handled (for the empty elements and the textarea element).

<HTML>
<HEAD>
<STYLE>

</STYLE>
<SCRIPT LANGUAGE="JavaScript1.5">
var emptyElements = {
  HR: true, BR: true, IMG: true, INPUT: true
};
var specialElements = {
  TEXTAREA: true
};
HTMLElement.prototype.outerHTML getter = function () {
  return getOuterHTML (this);
}
function getOuterHTML (node) {
  var html = '';
  switch (node.nodeType) {
    case Node.ELEMENT_NODE:
      html += '<';
      html += node.nodeName;
      if (!specialElements[node.nodeName]) {
        for (var a = 0; a < node.attributes.length; a++)
          html += ' ' + node.attributes[a].nodeName.toUpperCase() +
                  '="' + node.attributes[a].nodeValue + '"';
        html += '>'; 
        if (!emptyElements[node.nodeName]) {
          html += node.innerHTML;
          html += '<\/' + node.nodeName + '>';
        }
      }
      else switch (node.nodeName) {
        case 'TEXTAREA':
          for (var a = 0; a < node.attributes.length; a++)
            if (node.attributes[a].nodeName.toLowerCase() != 'value')
              html += ' ' + node.attributes[a].nodeName.toUpperCase() +
                      '="' + node.attributes[a].nodeValue + '"';
            else 
              var content = node.attributes[a].nodeValue;
          html += '>'; 
          html += content;
          html += '<\/' + node.nodeName + '>';
          break; 
      }
      break;
    case Node.TEXT_NODE:
      html += node.nodeValue;
      break;
    case Node.COMMENT_NODE:
      html += '<!' + '--' + node.nodeValue + '--' + '>';
      break;
  }
  return html;
}

</SCRIPT>
</HEAD>
<BODY>
<A HREF="javascript: alert(document.documentElement.outerHTML); void 0">
show document.documentElement.outerHTML
</A>
|
<A HREF="javascript: alert(document.body.outerHTML); void 0">
show document.body.outerHTML
</A>
|
<A HREF="javascript: alert(document.documentElement.innerHTML); void 0">
show document.documentElement.innerHTML
</A>
|
<A HREF="javascript: alert(document.body.innerHTML); void 0">
show document.body.innerHTML
</A>
<FORM NAME="formName">
<TEXTAREA NAME="aTextArea" ROWS="5" COLS="20">
JavaScript.FAQTs.com
Kibology for all.
</TEXTAREA>
</FORM>
<DIV>
<P>
JavaScript.FAQTs.com
</P>
<BLOCKQUOTE>
Kibology for all.
<BR>
All for Kibology.
</BLOCKQUOTE>
</DIV>
</BODY>
</HTML>

Note that the getter/setter feature is experimental and its syntax is 
subject to change.








 

HTMLElement.prototype.innerHTML setter = function (str) {
var r = this.ownerDocument.createRange();
r.selectNodeContents(this);
r.deleteContents();
var df = r.createContextualFragment(str);
this.appendChild(df);

return str;
}

HTMLElement.prototype.outerHTML setter = function (str) {
var r = this.ownerDocument.createRange();
r.setStartBefore(this);
var df = r.createContextualFragment(str);
this.parentNode.replaceChild(df, this);
return str;
}
				
HTMLElement.prototype.innerHTML getter = function () {
return getInnerHTML(this);
}
function getInnerHTML(node) {
var str = "";
for (var i=0; i<node.childNodes.length; i++)
str += getOuterHTML(node.childNodes.item(i));
return str;
}
HTMLElement.prototype.outerHTML getter = function () {
return getOuterHTML(this)
}
function getOuterHTML(node) {
var str = "";

switch (node.nodeType) {
case 1: // ELEMENT_NODE
str += "<" + node.nodeName;
for (var i=0; i<node.attributes.length; i++) {
if (node.attributes.item(i).nodeValue != null) {
str += " "
str += node.attributes.item(i).nodeName;
str += "=\"";
str += node.attributes.item(i).nodeValue;
str += "\"";
}
}
   if (node.childNodes.length == 0 && leafElems[node.nodeName])
str += ">";
else {
str += ">";
str += getInnerHTML(node);
str += "<" + node.nodeName + ">"
}
break;

case 3: //TEXT_NODE
str += node.nodeValue;
break;

case 4: // CDATA_SECTION_NODE
str += "<![CDATA[" + node.nodeValue + "]]>";
break;

case 5: // ENTITY_REFERENCE_NODE
str += "&" + node.nodeName + ";"
break;
  case 8: // COMMENT_NODE
str += "<!--" + node.nodeValue + "-->"
break;
}
 return str;
}
				
var _leafElems = ["IMG", "HR", "BR", "INPUT"];
var leafElems = {};
for (var i=0; i<_leafElems.length; i++)
leafElems[_leafElems[i]] = true;
然后我们可以封成JS引用
				
if (/Mozilla\/5\.0/.test(navigator.userAgent))
document.write('<script type="text/javascript" src="mozInnerHTML.js"></sc' + 'ript>');





====================================================================
<script language="JavaScript" type="Text/JavaScript">
<!--
var emptyElements = { HR: true, BR: true, IMG: true, INPUT: true }; var specialElements = { TEXTAREA: true };
HTMLElement.prototype.outerHTML getter = function() {
    return getOuterHTML(this);
    }
  function getOuterHTML(node) {
    var html = '';
    switch (node.nodeType) {
      case Node.ELEMENT_NODE: html += '<'; html += node.nodeName; if (!specialElements[node.nodeName]) {
        for (var a = 0; a < node.attributes.length; a++)
          html += ' ' + node.attributes[a].nodeName.toUpperCase() + '="' + node.attributes[a].nodeValue + '"';
        html += '>';
        if (!emptyElements[node.nodeName]) {
          html += node.innerHTML;
          html += '<\/' + node.nodeName + '>';
          }
        } else
        switch (node.nodeName) {
          case 'TEXTAREA': for (var a = 0; a < node.attributes.length; a++)
            if (node.attributes[a].nodeName.toLowerCase() != 'value')
              html
                += ' ' + node.attributes[a].nodeName.toUpperCase() + '="' + node.attributes[a].nodeValue
                   + '"';
            else
              var content = node.attributes[a].nodeValue;
            html += '>'; html += content; html += '<\/' + node.nodeName + '>'; break;
          } break;
      case Node.TEXT_NODE: html += node.nodeValue; break;
      case Node.COMMENT_NODE: html += '<!' + '--' + node.nodeValue + '--' + '>'; break;
      }
    return html;
    }
//-->
</script>
 

posted @ 2006-08-01 11:05 邓华的碎碎念 阅读(4143) | 评论 (1)编辑 收藏

vi命令是unix下常用而重要命令,可在全屏幕方式下编辑一个或多个文件。若在vi执行时
没有指定一个文件,那么vi命令会自动产生一个无名的空的工作文件。若指定的文件不存在,
那么就按指定的文件名创建一个新的文件。若对文件的修改不保存的话,v i命令并不改变原
来文件的内容。

  注意:vi命令并不锁住所编辑的文件,因此多个用户可能在同时编辑一个文件,那么最后
保存的文件版本将被保留。

下面是vi命令使用的一些选项及含义:

  -c sub-command 在对指定的文件编辑前,先执行指定的命令 sub-command .

  -r filename 恢复指定的文件filename .

  -R 将指定的文件以只读的方式放入编辑器中,这样不会保存对文件的任何修 改。

  -y number 将编辑窗口的大小设为number行。

  下面是vi编辑所处的三种模式:

  .命令模式 进入vi时所处的模式。在此模式下用户可输入各种子命令对进行*作,如删除行、
粘贴行、移向下一个字、移向不同行等。

  .文本输入模式 在此模式下可以修改一行的内容并增添新行。在命令模式下键入a 、i 或
c键可进入文本输入模式,按Escape键可返回命令模式。

  .命令项模式 在此模式下,可以通过子命令输入更多的参数。如:w子命令要求输入一文
件名,"/"子命令要求输入一个查找项。用户使用Escape键返回命令模式。


下面是自命令模式下执行的,在同一行上移动的自命令:

  h 将光标左移一格。

  l 将光标右移一格。

  j 将光标下移一格。

  k 将光标上移一格。

  w 将光标移到下一个小字的前面。

  W 将光标移到下一个大字的前面。

  b 将光标移到前一个小字的前面。

  B 将光标移到前一个大字的前面。

  e 将光标移到下一个小字的后面。

  E 将光标移到前一个大字的后面。

  fc 把光标移到同一行的下一个c字符处。

  Fc 把光标移到同一行的前一个c字符处。

  tc 把光标移到同一行的下一个字符c的前一格。

  Tc 把光标移到同一行的前一个字符c的后一格。

  number| 把光标移到递number列上。

下面是命令模式下在行间移动的子命令:

  +或Enter 把光标移至下一行第一个非空白字符。

  - 把光标移至上一行第一个非空白字符。

  0 把光标移到当前行的第一个字符处。

  $ 把光标移到当前行的最后一个字符处。

  H 把光标移到屏幕最顶端一行。

  L 把光标移到屏幕最底端一行。

  M 把光标移到屏幕中间。

下面是命令模式下改变屏幕显示的子命令:

  z- 把当前行作为屏幕的最后一行,并重新显示屏幕。

  z. 把当前行作为屏幕的中间一行,并重新显示屏幕。

  Ctrl+l 重新显示屏幕当前内容。

  /pattern/z- 寻找pattern的下一个位置,并把所在行设为屏幕的最后一行。

下面是在命令模式下用来显示页面的子命令:

  Ctrl + f向后滚一页。

  Ctrl + d向后滚半页。

  Ctrl + b向前滚一页。

  Ctrl + u向前滚半页。

  Ctrl + e屏幕向下滚一行。

  Ctrl + y屏幕项上滚一行。

下面是在命令模式下用来查找字符串所使用的子命令:

  /pattern 向后寻找指定的pattern ,若遇到文件尾,则从头再开始。

  ?pattern 向前寻找指定的pattern ,若遇到文件头,则从尾再开始。

  n 在上次指定的方向上,再次执行上次定义的查找。

  N 在上次指定的方向的相反方向上,再次执行上次定义的查找。

  /pattern/+number 将光标停在包含pattern的行后面第number行上。

  /pattern/-number 将光标停在包含pattern的行前面第number行上。

  % 移到匹配的"()"或"{}"上。

下面是在文本输入模式下用来输入文本的子命令(用户可在任何时候按Escape返回到命令模式):

  a 在光标之后开始输入文本。

  A在行尾开始输入文本。

  i在光标之前开始输入文本。

  I在行首第一个非空白字符前输入文本。

  o在光标所在行后插入一空行。

  O在光标所在行前插入一空行。

下面是在命令模式下改变文本所使用的子命令(用户可在任何的时候按Escape键返回到命令模式):

  cc或S 修改一整行。

  C 改变一行光标位置以后的部分。

  cw 改变光标所在单词。

  dd删除当前行。

  D 删除光标所在行光标后面的内容。

  dw删除光标所在的单词。

  J 把下一行内容加到本行行尾。

  rc把光符所在字符替换成c .

  R 覆盖本行内容。

  u恢复上一次的修改。

  x删除光标所在的字符。

  ~ 改变光标所在出字符的大小写。

  . 重复上一个*作。

  <<把当前行移到左边。

  >>把当前行移到右边。

下面是用于文件中拷贝文本的字命令:

  p 将缓冲区内容取到光标所在行的下面一行。

  P 将缓冲区内容取到光标所在行的上面一行。

  "bd 将文本删除至有名缓冲区b .

  "bp 张贴有名缓冲区b中内容。

  yy把当前行放入缓冲区。

  Y 把当前行放入缓冲区。

  Yw把光标所在的单词放入缓冲区。

下面是用于保存文件的子命令:

  :w 回写修改后的文件。

  :w filename 当filename不存在时,把修改后的文件存为文件filename ,当文件filename
存在时,报错。

  !w filename 如果文件filename存在时,把修改后的文件保存为文件filename .

下面列出了在vi编辑的多个文件之间切换所用的子命令:

  :n开始编辑vi激活的文件列表中的下一个文件。

  :n filenames 指定将被编辑的新的文件列表。

下面列出了用于在当前文件和另外一个文件间切换的子命令:

  :e filename 使用filename激活vi (在vi中装入另一个文件filename)。

  e!重新装入当前文件,若当前文件有改动,则丢弃以前的改动。

  :e+filename 使用filename激活vi ,并从文件尾部开始编辑。

  :e+number filename 使用filename激活vi ,并在第number行开始编辑。

  :e# 开始编辑另外一个文件。

下面是在本文件中加入其他文件代码所使用的子命令:

  :r filename读取filename文件,并将其内容加到当前文件后。

  :r ! command执行command文件,并将其输出加到当前文件后。

下面是vi中其他的子命令:

  ctrl+g 取得正在编辑文件的有关信息。

  :sh启动sh ,从sh中返回可用exit或ctrl+d .

  :! Command 执行命令command .

  !!重新执行上次的:! Command子命令。

  :q退出vi ,若用户对编辑的文件有所修改,系统不会让用户使用q命令退出。

  :q!退出vi而不管是否对文件有改动。

  ZZ或:wq 保存对文件的修改并退出vi .

  用户可在一个特殊的文件.exrc中定义特殊的vi命令。在vi中使用这些命令时,必须在该
命令前加上一个冒号( :) 。
posted @ 2006-07-30 23:00 邓华的碎碎念 阅读(191) | 评论 (0)编辑 收藏

争取下个星期前完成blog

posted @ 2006-05-27 17:59 邓华的碎碎念 阅读(268) | 评论 (2)编辑 收藏

1.最基本,最常用的,测试物理网络的

ping 192.168.0.8 -t ,参数-t是等待用户去中断测试

2.查看DNS、IP、Mac等

A.Win98:winipcfg

B.Win2000以上:Ipconfig/all

C.NSLOOKUP:如查看河北的DNS

C:\>nslookup

Default Server: ns.hesjptt.net.cn

Address: 202.99.160.68

>server 202.99.41.2 则将DNS改为了41.2

> pop.pcpop.com

Server: ns.hesjptt.net.cn

Address: 202.99.160.68

Non-authoritative answer:

Name: pop.pcpop.com

Address: 202.99.160.212

3.网络信使 (经常有人问的~)

Net send 计算机名/IP|* (广播) 传送内容,注意不能跨网段

net stop messenger 停止信使服务,也可以在面板-服务修改

net start messenger 开始信使服务

4.探测对方对方计算机名,所在的组、域及当前用户名 (追捕的工作原理)

ping -a IP -t ,只显示NetBios名

nbtstat -a 192.168.10.146 比较全的

5.netstat -a 显示出你的计算机当前所开放的所有端口

netstat -s -e 比较详细的显示你的网络资料,包括TCP、UDP、ICMP 和 IP的统计等

6.探测arp绑定(动态和静态)列表,显示所有连接了我的计算机,显示对方IP和MAC地址

arp -a

7.在代理服务器端

捆绑IP和MAC地址,解决局域网内盗用IP!:

ARP -s 192.168.10.59 00 -50-ff-6c-08-75

解除网卡的IP与MAC地址的绑定:

arp -d 网卡IP

8.在网络邻居上隐藏你的计算机 (让人家看不见你!)

net config server /hidden:yes

net config server /hidden:no 则为开启

9.几个net命令

A.显示当前工作组服务器列表 net view,当不带选项使用本命令时,它就会显示当前域或网络上的计算机上的列表。

比如:查看这个IP上的共享资源,就可以

C:\>net view 192.168.10.8

在 192.168.10.8 的共享资源

资源共享名 类型 用途 注释

网站服务 Disk

A.命令成功完成。

B.查看计算机上的用户帐号列表 net user

C.查看网络链接 net use

例如:net use z: \\192.168.10.8\movie 将这个IP的movie共享目录映射为本地的Z盘

D.记录链接 net session

例如:

C:\>net session

计算机 用户名 客户类型 打开空闲时间

192.168.10.110 ROME Windows 2000 2195 0 00:03:12

\\192.168.10.51 ROME Windows 2000 2195 0 00:00:39

命令成功完成。

10.路由跟踪命令

A. tracert pop.pcpop.com

B. pathping pop.pcpop.com 除了显示路由外,还提供325S的分析,计算丢失包的%

11.关于共享安全的几个命令

A.查看你机器的共享资源 net share

B.手工删除共享(可以编个bat文件,开机自运行,把共享都删了!)

net share c$ /d

net share d$ /d

net share ipc$ /d

net share admin$ /d

注意$后有空格。

C.增加一个共享:

c:\net share mymovie=e:\downloads\movie /users:1

mymovie 共享成功。

同时限制链接用户数为1人。

12.在DOS行下设置静态IP

A.设置静态IP

CMD

netsh

netsh>int

interface>ip

interface ip>set add "本地链接" static IP地址 mask gateway

B.查看IP设置

interface ip>show address

Arp

显示和修改“地址解析协议 (ARP)”缓存中的项目。ARP 缓存中包含一个或多个表,它们用于存储 IP 地址及其经过解析的以太网或令牌环物理地址。计算机上安装的每一个以太网或令牌环网络适配器都有自己单独的表。如果在没有参数的情况下使用,则 arp 命令将显示帮助信息。

语法

arp [-a [InetAddr] [-N IfaceAddr]] [-g [InetAddr] [-N IfaceAddr]] [-d InetAddr [IfaceAddr]] [-s InetAddr EtherAddr [IfaceAddr]]

参数

-a [InetAddr] [-N IfaceAddr]

显示所有接口的当前 ARP 缓存表。要显示指定 IP 地址的 ARP 缓存项,请使用带有 InetAddr 参数的 arp -a,此处的 InetAddr 代表指定的 IP 地址。要显示指定接口的 ARP 缓存表,请使用 -N IfaceAddr 参数,此处的 IfaceAddr 代表分配给指定接口的 IP 地址。-N 参数区分大小写。

-g [InetAddr] [-N IfaceAddr]

与 -a 相同。

-d InetAddr [IfaceAddr]

删除指定的 IP 地址项,此处的 InetAddr 代表 IP 地址。对于指定的接口,要删除表中的某项,请使用 IfaceAddr 参数,此处的 IfaceAddr 代表分配给该接口的 IP 地址。要删除所有项,请使用星号 (*) 通配符代替 InetAddr。

-s InetAddr EtherAddr [IfaceAddr]

向 ARP 缓存添加可将 IP 地址 InetAddr 解析成物理地址 EtherAddr 的静态项。要向指定接口的表添加静态 ARP 缓存项,请使用 IfaceAddr 参数,此处的 IfaceAddr 代表分配给该接口的 IP 地址。

/?

在命令提示符显示帮助。

注释

InetAddr 和 IfaceAddr 的 IP 地址用带圆点的十进制记数法表示。

物理地址 EtherAddr 由六个字节组成,这些字节用十六进制记数法表示并且用连字符隔开(比如,00-AA-00-4F-2A-9C)。

通过 -s 参数添加的项属于静态项,它们不会 ARP 缓存中超时。如果终止 TCP/IP 协议后再启动,这些项会被删除。要创建永久的静态 ARP 缓存项,请在批处理文件中使用适当的 arp 命令并通过“计划任务程序”在启动时运行该批处理文件。

只有当网际协议 (TCP/IP) 协议在 网络连接中安装为网络适配器属性的组件时,该命令才可用。

范例

要显示所有接口的 ARP 缓存表,可键入:

arp -a

对于指派的 IP 地址为 10.0.0.99 的接口,要显示其 ARP 缓存表,可键入:

Arp -a -N 10.0.0.99

要添加将 IP 地址 10.0.0.80 解析成物理地址 00-AA-00-4F-2A-9C 的静态 ARP 缓存项,可键入:

Arp -s 10.0.0.80 00-AA-00-4F-2A-9C

At

计划在指定时间和日期在计算机上运行命令和程序。at 命令只能在“计划”服务运行时使用。如果在没有参数的情况下使用,则 at 列出已计划的命令。

语法

at [\\ComputerName] [{[ID] [/delete]|/delete [/yes]}]

at [[\\ComputerName] hours:minutes [/interactive] [{/every:date[,...]|/next:date[,...]}] command]

参数

\\computername

指定远程计算机。如果省略该参数,则 at 计划本地计算机上的命令和程序。

ID

指定指派给已计划命令的识别码。

/delete

取消已计划的命令。如果省略了 ID,则计算机中所有已计划的命令将被取消。

/yes

删除已计划的事件时,对来自系统的所有询问都回答“是”。

hours:minutes

指定命令运行的时间。该时间用 24 小时制(即从 00:00 [午夜] 到 23:59)的 小时: 分钟格式表示。

/interactive

对于在运行 command 时登录的用户,允许 command 与该用户的桌面进行交互。

/every:

在每个星期或月的指定日期(例如,每个星期四,或每月的第三天)运行 command 命令。

date

指定运行命令的日期。可以指定一周的某日或多日(即,键入 M、T、W、Th、F、S、Su)或一个月中的某日或多日(即,键入从 1 到31 之间的数字)。用逗号分隔多个日期项。如果省略了 date,则 at 使用该月的当前日。

/next:

在下一个指定日期(比如,下一个星期四)到来时运行 command。

command

指定要运行的 Windows 命令、程序(.exe 或 .com 文件)或批处理程序(.bat 或 .cmd 文件)。当命令需要路径作为参数时,请使用绝对路径,也就是从驱动器号开始的整个路径。如果命令在远程计算机上,请指定服务器和共享名的通用命名协定 (UNC) 符号,而不是远程驱动器号。

/?

在命令提示符显示帮助。

注释

Schtasks 是功能更为强大的超集命令行计划工具,它含有 at 命令行工具中的所有功能。对于所有的命令行计划任务,都可以使用 schtasks 来替代 at。有关 schtasks 的详细信息,请参阅“相关主题”。

使用 at

使用 at 命令时,要求您必须是本地 Administrators 组的成员。

加载 Cmd.exe

在运行命令之前,At 不会自动加载 Cmd.exe (命令解释器)。如果没有运行可执行文件 (.exe),则在命令开头必须使用如下所示的方法专门加载 Cmd.exe:

cmd /c dir > c:\test.out。

查看已计划的命令

当不带命令行选项使用 at 时,计划任务会出现在类似于以下格式的表中:

Status ID Day Time Command Line

OK 1 Each F 4:30 PM net send group leads status due

OK 2 Each M 12:00 AM chkstor > check.file

OK 3 Each F 11:59 PM backup2.bat

包含标识号 (ID)

当在命令提示下使用带有标识号 (ID) 的 at 命令时,单个任务项的信息会显示在类似于下面的格式中:

Task ID: 1

Status:OK

Schedule:Each F

Time of Day:4:30 PM

Command:net send group leads status due当计划带有 at 的命令(尤其是带有命令行选项的命令)后,要通过键入不带命令行选项的 at 来检查该命令语法是否输入正确。如果显示在“命令行”列中的信息不正确,请删除该命令,然后重新键入它。如果还不正确,则可以在重新键入该命令时让它少带些命令行选项。

查看结果

使用 at 的已经计划的命令作为后台程序运行。运行结果不会显示在计算机上。要将输出重定向到文件,请使用重定向符号 (> )。如果将输出重定向到文件,则不论是在命令行还是在批处理文件中使用 at,都需要在重定向符号之前使用转义符 (^)。例如,要重定向输出到 Output.text 文件,则要键入:

at 14:45 c:\test.bat ^>c:\output.txt

执行命令的当前目录为 systemroot 文件夹。

更改系统时间

在使用 at 命令计划了要运行的命令之后,如果更改了计算机的系统时间,则通过键入不带命令行选项的 at 可使 at 计划程序与修改后的系统时间同步。

存储命令

已计划的命令存储在注册表中。这样,如果重新启动“计划”服务,则不会丢失计划任务。

连接到网络驱动器

对于需要访问网络的计划作业,请不要使用已重新定向的驱动器。“计划”服务可能无法访问这些重定向的驱动器,或者,在该计划任务运行时如果有其他用户登录,则这些重定向的驱动器可能不会出现。因此,对于计划作业,请使用 UNC 路径。例如:

at 1:00pm my_backup \\server\share

请不要使用下述语法(其中 x: ?表示由用户建立的连接):

at 1:00pm my_backup x:

如果计划了一个使用驱动器号的 at 命令来连接共享目录,则应包含一个 at 命令以使在完成该驱动器的使用时断开与驱动器的连接。如果不能断开与驱动器的连接,则在命令提示下,所指派的驱动器号将不可用。

范例

要显示 Marketing 服务器上已计划的命令列表,请键入:

at \\marketing

要了解服务器 Corp 上标识号为 3 的命令的详细信息,请键入:

at \\corp 3

要计划在上午 8:00 于 Corp 服务器上运行网络共享命令,并将该列表重定向到 Maintenance 服务器的 Corp.txt 文件(位于 Reports 共享目录下)中,请键入:

at \\corp 08:00 cmd /c "net share reports=d:\marketing\reports >> \\maintenance\reports\corp.txt"

为了在每五天后的午夜将 Marketing 服务器的硬盘驱动器备份到磁带驱动器,首先创建名为 Archive.cmd 的批处理程序(它含有备份命令),然后计划该批处理程序的运行,为此请键入:

at \\marketing 00:00 /every:5,10,15,20,25,30 archive

要取消当前服务器上已计划的所有命令,请按下述方法清除 at 计划信息:

at /delete

如果要运行的命令不是可执行 (.exe) 文件,请按如下所示的方法在该命令之前使用 cmd /c 来加载 Cmd.exe:

cmd /c dir > c:\test.out。

posted @ 2006-05-25 10:59 邓华的碎碎念 阅读(151) | 评论 (0)编辑 收藏

     摘要: Code highlighting produced by Actipro CodeHighlighter (freeware)http://www.CodeHighlighter.com/-->   import  java.util.regex. * ; // 导入正则表达式包中的类 ...  阅读全文
posted @ 2006-05-24 09:53 邓华的碎碎念 阅读(1224) | 评论 (4)编辑 收藏

前一阵微软更新了 IE 浏览器,针对 IE 的更新,使 Active X内容不能自动载入,必须先激活方可使用.这些改变可以在 Adobe 的某些软件中看到 , 包括
flashplayer.
Authorware player,
shockwave Player,
SVG Viewer,
Help Center
Adobe Reader,

当然还有 Sun Java, Apple QuickTime, RealNetworks,RealPlayer 和其它的 ActiveX .

通过某些方法嵌入到 html 页面中的交互内容可能不能响应用户的输入 ( 例如 , 键盘 , 鼠标 )

直到用户点击要么激活要么继续

 

现在我们将使用 deconcept 的开源代码 flashObject 这里下载 Download FlashObject 1.3 来解决这个问题。

基本方法如下:

只需要将 flashobject.js 包含在你的 html 页面内,然后加上一点 javascript 代码嵌入 flash swf ok 了.
它的工作方式如下:

代码 :

<script type="text/javascript" src="flashobject.js"></script>
<div id="flashcontent">
This text is replaced by the Flash movie.
</div>
<script type="text/javascript">
var fo = new FlashObject("movie.swf", "mymovie", "200", "100", "7", "#336699");
fo.write("flashcontent");
</script>



简单分析一下
1:
<div id="flashcontent">
This text is replaced by the Flash movie.
</div>


这一段相当于我们在为放置 flash 文件而准备的一个 holder. 有些象我们常用的空的 MovieClip holder. 为放入内容而准备的.如果你没有装 flashplayer. 那么里面的那行字会显示出来如显示为 ”This text is replaced by the Flash movie.” 如果你装了 flashplayer ,那这行字是不会显示的,用户基本上是看不到的,同时它还有一个好处是你可以把这行内容变成的你搜索关键字, google 会很容易搜到它的.呵呵,一举两得. 下面这段一看就知道是什么了.

2:
<script type="text/javascript">
var fo = new FlashObject("movie.swf", "mymovie", "200", "100", "7", "#336699");
fo.write("flashcontent");
</script>


用来嵌入 swf, 比如当前的影片文件是 ”movie.swf”, id ”mymoive, 宽是 200, 高是 100,flashplayer 版本是 7, 背景色是 #336699.

下面我们来看一下我们嵌入一个 flash 的范例 .


根据上面的基本工作方式 , 我们还要嵌入一些其它的参数 . 来满足我们一些其它的需要

比如我们有一个文件名为 ws.swf, 我们想把它嵌入到页面中 , 又不至于受 IE 更新的影响 .

1.
在页面中包入 flashobject.js 文件
<script type="text/javascript" src="flashobject.js"></script>
一般这行代码可以写在 body 标签之前即可 .

2.
把下面这段代码加在它下方 .

代码 :
<div id="flashcontent" style="width: 300px; height: 200px"></div>
<script type="text/javascript">
var fo = new FlashObject("ws.swf", "mymovie", "300", "200px", "7", "#336699");
fo.addParam("quality", "low");
fo.addParam("wmode", "transparent");
fo.addParam("salign", "t");
fo.addParam("scale", "noscale");
fo.addParam("loop", "false");
fo.write("flashcontent");
</script>


从上面的代码中我们看出 , 我们将要把 FLASH 放在 id flashcontent 层中 , 它的宽为 300 高为 200 像素 , 那么应是和我们的 swf 文件的大小是相同的 . 如果你想缩放也可以是不同的 . 下面 var fo = new FlashObject("ws.swf", "mymovie", "300", "200px", "7", "#336699"); 是嵌入 flash 文件 , 在之前的内容已介绍过它里面的参数 , 其中的 ws.swf 可以是相对路径也可以是绝对路径 , 如你可以直接输入网站加上你的 swf 文件名字 .
在下面的一段就是我们可以加入的参数 , 从上到下分别为 quality 质量 ,wmode transparent 透明 ,salign 对齐 ,scale 缩放 ,loop 循环等 .
这样我们的嵌入过程就完成了 .

如果你想使用 flashVars 来进行 html flash 之前的通讯 , 使用 flashobject 也是很容易的 , 但有一点使用 flashobjcet 时只有在 swf 刚一载入时传递参数 . 并且是以值对的形式来传递 , 如下 :variable1=value1&variable2=value2&variable3=value3
使用方法如下 :
代码 :
<script type="text/javascript">
var fo = new FlashObject("movie.swf", "mymovie", "200", "100", "7", "#336699");
fo.addVariable("variable1", "value1");
fo.addVariable("variable2", "value2");
fo.addVariable("variable3", "value3");
fo.write("flashcontent");
</script>


一旦这一步完成 , 那么所有的变量就已经传入到 flash, 你就可以灵活的在你的 flash 中的 _root 上使用了 .
deconcept flashObject
还提供了可以加入其它参数的说明.你可以详细查看

posted @ 2006-05-17 09:32 邓华的碎碎念 阅读(1087) | 评论 (0)编辑 收藏

仅列出标题
共5页: 上一页 1 2 3 4 5 下一页