終于把weboffice控件集合到項目中,在此記錄下使用過程中遇到的坑。
項目情況
公司有個項目需要使用到在線文檔編輯器,之前是采用免費(fèi)的NTKO控件,但是該控件不能兼容所有瀏覽器,只能在IE瀏覽器上使用。為什么只能在IE上使用在線文檔編輯器呢,因為微軟的office的插件只支持IE。
那市面上有沒有跨瀏覽器使用的文檔編輯器呢?
目前尚無免費(fèi)的跨瀏覽器office文檔控件。而收費(fèi)的有款PageOffice,但是在實際使用時,與直接開啟office編輯工具相比,功能上還存在較大差異。
使用WebOffice
weboffice可以實現(xiàn)跨瀏覽器編輯office文檔,它是一種系統(tǒng)級控件相當(dāng)于在系統(tǒng)上安裝了相應(yīng)的軟件,然后在瀏覽器上進(jìn)行調(diào)用,這就意味著需要跳出當(dāng)前瀏覽器而調(diào)用軟件自己的瀏覽器。而上面提到的其它控件是瀏覽器控件,直接嵌入到瀏覽器中,可以做到無縫使用。
碰到的問題
1、跳出瀏覽器意味著就不能實現(xiàn)session共享。
需要通過session傳值的解決辦法:
當(dāng)用戶使用智能窗打開系統(tǒng)內(nèi)頁時,SESSION值如何傳遞的問題:
WebOffice使用URL TOKEN解決方案:
? 1)、當(dāng)用戶登陸系統(tǒng)時,記下用戶的帳號名稱和登陸時間存入數(shù)據(jù)庫兩個字段,關(guān)將帳號名和登陸時間統(tǒng)一成字符串后進(jìn)行MD5加密產(chǎn)生一個密碼串 并根據(jù)需要把要用的SESSIN值存入數(shù)據(jù)庫相應(yīng)字段里。
? 2)、在打開智能窗時把賬號名和MD5加密串分別用URL參數(shù)如 http://www.aa.com/aa.jsp?fileid=1&user=賬號名&token=MD5加密串, 進(jìn)行傳遞
? 3)、在aa.jsp通過獲得的賬號名,找到庫里存儲的此賬號最近一次登陸的時間,通過前面登陸時使用的加密算法對賬號和從庫里取出的時間進(jìn)行MD5加密,得出一個新的加密字符串,如果此加密字符串與網(wǎng)址里 aa.jsp?fileid=1&user=賬號名&token=MD5加密串 里token參數(shù)的值一至,則一定是同一個人操作,接下來再到庫中把對應(yīng)的SESSION值讀取出來就可以了。
驗證通過!
2、無法獲得父窗口相應(yīng)的屬性。比如:在保存文檔結(jié)束之后,父窗口不知道該操作結(jié)束,無法做出相應(yīng)的更新。
解決辦法:第一次操作時記錄下相應(yīng)狀態(tài)并啟動js輪詢,保存后更改狀態(tài)。當(dāng)父窗口的js輪詢返回對應(yīng)的狀態(tài)后,父頁面進(jìn)行相應(yīng)更新,最后銷毀該輪詢。(本來是想采用websocket的,但好像部分瀏覽器暫時不支持html5)
3、自定義彈出窗口無法限制在文檔之上。
解決辦法:百度了div如何顯示在ocx之上。
例子:
<center>
<div id=divinfo style="visibility:hidden">
<iframe style="position:absolute;top:50px;left:200px;background-color:transparent;" id=webifrm src="about:blank" width="1000px" height="350px" scrolling="no" frameborder="0"></iframe>
<div style="position:absolute;top:50px;left:200px;border:0px solid transparent;">
<div class="easyui-panel" style="margin:-10px 0px 0px -10px">
<div id="p" class="easyui-panel" title="插入標(biāo)簽" style="width:1000px;height:350px;margin:0px;"
data-options="collapsible:false,minimizable:false,maximizable:false,closable:false,tools:[{
iconCls:'icon-clear',handler:closeBqPanel
}]">
<form id="wsmbbqForm" method="post" class="form-horizontal">
? ? ? ? ? 分類代碼: <input id="txt_fldm"? name="txt_fldm"? size="30" class="easyui-combobox" data-options="valueField:'id',textField:'text',url:'${(appName)!}/common/dict?fldm=SSTJ_W91'"/>
? ? ? ? ? 標(biāo)簽名稱: <input id="txt_bqmc" class="easyui-textbox" style="width:200px">
<button type="button" class="btn button-primary easyui-linkbutton" iconCls="icon-search" onclick="funSearchBq()">查詢</button>
<button type="reset" class="btn button-warning easyui-linkbutton" iconCls="icon-reload" onclick="$('#wsmbbqForm').form('clear');">重置</button>
</form>
<div id="bqGrid" class="easyui-panel" style="width:100%;padding:10px">?
</div>
</div>
</div>
</div>
</div>
</center>