1. 程式人生 > >解決模式對話方塊和window.open開啟新頁面Session會丟失問題

解決模式對話方塊和window.open開啟新頁面Session會丟失問題

模式對話方塊頁面通過超連結(_blank類)或window.open開啟新頁面Session會丟失 
解決方法如下: 
在使用showModalDialog時會經常出現Session失效的問題,尤其是在這樣的使用情況下: 
首先window. showModalDialog,然後執行任何的建立新視窗有關的操作,比如<a href=”xxxx” target=”_blank”> ,或者在模態視窗中呼叫window.open,或者通過內建幀開啟某一頁面,這種情況下都有可能造成Session丟失。

(可以先隨便開啟一個IE視窗,然後再新開一個IE視窗,然後登入OA進行上述有關操作,都有可能造成session丟失) 

解決方法是使用父視窗的,也就是開啟模態視窗的Window物件來進行新建操作。 

具體步驟如下: 
比如在原來的主視窗的列表頁面有如下語句: 
window.showModalDialog(url,’’,’status=no;dialogWidth=' + iwidth + 'px;dialogHeight=' +
iheight + 'px;center=yes;help=no;') 
把它修改成 
window.showModalDialog(url,window,’status=no;dialogWidth=' + iwidth + 'px;dialogHeight=' + iheight + 'px;center=yes;help=no;')

也就是說原來第二個引數是什麼都不填的,現在填window。 
假設模態視窗中呼叫其他頁面的 
<a href="download.jsp?accessoryId=<%=zhengwen.getId()%>" target="_blank"> <%=zhengwen.getOldFileName()%> </a>
需要做如下修改 
首先增加一個客戶端函式,用於獲得傳入的主視窗window物件 
<script language="javascript"> 
      function openUrl(urlstr) 
      { 
              var openobj = window; 

              if(typeof(window.dialogArguments) == 'object') 
              { 
                    openobj = window.dialogArguments; 
              } 
              openobj.open(urlstr,"_blank"); 
      } 
      </script> 
然後修改連結的開啟方式 
<a href="#" onClick="openUrl('download.jsp?accessoryId=<%=zhengwen.getId()%>')" ><%=zhengwen.getOldFileName()%
></a> 
這樣Session就不會丟失了!