【分享】修復SupeSite/XSpace4的日誌編輯器的bug

昨天發現SupeSite/XSpace4.0的日誌編輯器有bug,也就是在IE8下點擊「插入表情」、「文本顏色」等的時候是彈出一個新的標籤頁,而不是彈出模態對話框,而且在彈出的對話框中選擇表情的時候報錯「dialogArguments is undefined」。
一開始我覺得是IE8中不支持dialogArguments 了,可是發現不對,由於IE8下「彈出一個新的標籤頁,而不是彈出模態對話框」,由於IE8是支持showModelessDialog/showModelessDialog、很顯然在IE8下調用的不是showModalDialog或者showModelessDialog,而是window.open,打開編輯器的文件/p_w_picpaths/edit/edit.js,看到function oPenWin函數的定義:
 function oPenWin(_sTitle, _sWidth, _sHeight, _sUrl, _bDialog, _open){
  xposition=0; yposition=0;
  if ((parseInt(navigator.appVersion) >= 4 )) {
   xposition = (screen.width - _sWidth) / 2;
   yposition = (screen.height - _sHeight) / 2;
  }
    if(_open) {
   window.open(_sUrl,"win","menubar=no,location=no,resizable=no,scrollbars=no,status=no,left="+xposition+",top="+yposition+",width="+_sWidth+",height="+_sHeight);
  } else {
   if(window.Event) {
    window.open(_sUrl,"win","menubar=no,location=no,resizable=no,scrollbars=no,status=no,left="+xposition+",top="+yposition+",innerWidth="+_sWidth+",innerHeight="+_sHeight);
   } else {
    if(_bDialog == true) {
     showModelessDialog(_sUrl, window, "dialogHeight:"+(_sHeight+20)+"px;dialogWidth:"+_sWidth+"px;status:no;help:no;resizable:yes;status:no;tustatus:no;");
    } else {
     showModalDialog(_sUrl, window, "dialogHeight:"+(_sHeight+20)+"px;dialogWidth:"+_sWidth+"px;status:no;help:no;resizable:yes;status:no;tustatus:no;");
    }
   }
  }
不知道它在哪判斷來判斷去究竟是調用window.open仍是showModelessDialog仍是showModalDialog是在作什麼,用這麼複雜嗎?直接調用showModalDialog/showModelessDialog不就好了嗎?反正你調用window.open在對話框中也無法用dialogArguments (由於用window.open打開的窗口是得不到dialogArguments 的)。
因此修改以下,在if(_open) {上增長:
  if(_bDialog == true)
  {
   showModelessDialog(_sUrl, window, "dialogHeight:"+(_sHeight+20)+"px;dialogWidth:"+_sWidth+"px;status:no;help:no;resizable:yes;status:no;tustatus:no;");
  } else
   {
   showModalDialog(_sUrl, window, "dialogHeight:"+(_sHeight+20)+"px;dialogWidth:"+_sWidth+"px;status:no;help:no;resizable:yes;status:no;tustatus:no;");
  }  
  return;
 
搞定!
相關文章
相關標籤/搜索