javascript 跨域訪問 沒有權(quán)限的問題
公司買的報表工具,為了節(jié)省成本,將報表服務(wù)單獨(dú)部署了一個應(yīng)用,我們的業(yè)務(wù)系統(tǒng)調(diào)用報表應(yīng)用展現(xiàn)報表,開發(fā)還算順利,現(xiàn)在到了用戶試用了,問題來了
其中有個功能叫報表反查,頁面中包含了四個fream,用戶在其中三個fream中設(shè)置查詢條件,當(dāng)點擊查詢按鈕,調(diào)用javascript得到每個fream中的參數(shù),并將參數(shù)賦值到第四個fream中的form中的隱藏屬性中,然后提交這個form(這時的form是在業(yè)務(wù)系統(tǒng)中的jsp)調(diào)用報表服務(wù)器的action,返回報表(此時的是報表應(yīng)用返回的頁面,不再是業(yè)務(wù)系統(tǒng)中的jsp了)。
這涉及到了兩個應(yīng)用,再次點擊查詢按鈕,Ie就會報“沒有權(quán)限”錯誤。
在網(wǎng)上搜,一個結(jié)論,瀏覽器不允許javaScript跨域訪問,據(jù)說為了安全,那咋辦,得用啊?!
搜啊搜,找到一個文章專門討論這事兒的,作者提出了三種解決方案:
1、在涉及到跨域訪問的頁面中加入
<script language="JavaScript">
<!--
document.domain = "mycompany.com"; //指定 document 所屬的域
-->
</script>
這樣可以蒙混過瀏覽器,但是這種方法必須滿足一個條件,就是兩個應(yīng)用必須屬于同一個父域,也就是,比如,abc.def.com父域就該是def.com,如果document.domain = "域名";設(shè)置的不是其父域,就會報“參數(shù)無效”的錯誤。
而問題是我們的報表服務(wù)器和業(yè)務(wù)系統(tǒng)服務(wù)器不在一個父域下,這條路是行不通了
召集了公司幾個同事討論,最后得出兩個方案,一是改為彈出窗口,而是寫webservice
考慮到工作量,修改要小,選擇了彈出窗口。
2、是IE獨(dú)有了,就是彈出showmodaldialog,這種方法因為IE升級又行不通了。
3、就是通過服務(wù)器處理了。
總結(jié),現(xiàn)在看來,解決這個問題就是1和3兩種方案,第一種是在客戶端處理,局限就是兩個應(yīng)用必須在同一個父域下,還有就是好像不是所有的瀏覽器支持設(shè)置domain。第二種就是通過服務(wù)器處理,這種方法好像勢必要刷新整個窗口,像我這種情況,一個頁面中有幾個fream的情況,像保留用戶設(shè)置的參數(shù),還么有想到好的解決方法。
還想到一條路就是用ajax,這倒是實現(xiàn)了無刷新,但是我們的報表頁面展現(xiàn)是一個自定義的jsp標(biāo)簽,還是要服務(wù)器展現(xiàn),這條路沒走下去。