firefox与ie中编写js需注意的几点问题--完善中...

1.设置html元素可编辑
firefox(简称ff) 中,先用一个iframe包装html, 用iframe.contentWindow.document.designMode = "on"; 设置iframe的内容可编辑,
off时为不可编辑
IE中, 可在Div等容器控件上设置 div.contentEditable = true; 使该div内容可编辑(false为不可编辑)

需要注意,ff中iframe可编辑时,其内部的html元素的所有事件将无法响应. 所以当需相应事件时(如按钮提交),需
先在iframe外用js将iframe.contentWindow.document.designMode="off", 响应完后设置回来.
利用execCommand()函数编辑时,ff不支持"Cut","Copy","Paste"三种操作.

另外插入html元素时,
IE:可用 div.focus(); var rng = div.document.selection.createRange(); rng.pasteHTML(html),将html内容插入到div的选定范围中.
ff: iframe.contentWindow.document.execCommand("inserthtml",null,html);

2.disabled属性
ff中容器控件如Div,table等设置该属性无效.必须在包含的具体html元素上(input等上)设置该属性
IE可在顶级容器控件上设置.
ff中需编写递归程序来设置一个父容器中所有叶子元素的disabled,参考如下.
 
var reg = /^button|input|texterea$/gi;
function disabledAllNode(node)
{
 var i=0;
 for (; i<node.childNodes.length; i++ )
 {
  var obj = node.childNodes[i];
  if(reg.test(obj.tagName))
  {
   obj.disabled = 'disabled';
  }
  
  if(obj && obj.childNodes && obj.childNodes.length>0 )
   disabledAllNode(obj);
 }
}


3.事件引发元素 ie:event.target; ff: event.srcElement

4.弹出窗口
ff: 不支持showModalDialog. 用window.open(url,name,feature,replace) 替代, feature中将设置modal=yes;
如window.open('test.aspx',null,'left=100px,top=30px,modal=yes,width=650px,height=640px,resizable=yes,scrollbars=no');

 5.增加事件处理
<img   id="a"   src="/a.jpg"   onclick="alert('a');"/><div   onclick="clickObj('a')">click   me</div>  
  <script   language="javascript">  
  <!--  
  function   clickObj(o){  
  var   o   =   document.getElementById(o);  
  if(   document.all   )    
  {  
  o.fireEvent("onclick");  
  }  
  else  
  {  
  var   e   =   document.createEvent('MouseEvent');  
  e.initEvent('click',false,false);  
  o.dispatchEvent(e);  
  }  
  }  
  //-->  
  </script>

posted @ 2008-05-29 13:45  whzncut  阅读(1755)  评论(0编辑  收藏  举报