Loading...

          java .net

          javascript 跨域訪問 沒有權(quán)限的問題

                公司買的報(bào)表工具,為了節(jié)省成本,將報(bào)表服務(wù)單獨(dú)部署了一個(gè)應(yīng)用,我們的業(yè)務(wù)系統(tǒng)調(diào)用報(bào)表應(yīng)用展現(xiàn)報(bào)表,開發(fā)還算順利,現(xiàn)在到了用戶試用了,問題來了

               其中有個(gè)功能叫報(bào)表反查,頁(yè)面中包含了四個(gè)fream,用戶在其中三個(gè)fream中設(shè)置查詢條件,當(dāng)點(diǎn)擊查詢按鈕,調(diào)用javascript得到每個(gè)fream中的參數(shù),并將參數(shù)賦值到第四個(gè)fream中的form中的隱藏屬性中,然后提交這個(gè)form(這時(shí)的form是在業(yè)務(wù)系統(tǒng)中的jsp)調(diào)用報(bào)表服務(wù)器的action,返回報(bào)表(此時(shí)的是報(bào)表應(yīng)用返回的頁(yè)面,不再是業(yè)務(wù)系統(tǒng)中的jsp了)。

               這涉及到了兩個(gè)應(yīng)用,再次點(diǎn)擊查詢按鈕,Ie就會(huì)報(bào)“沒有權(quán)限”錯(cuò)誤。

              在網(wǎng)上搜,一個(gè)結(jié)論,瀏覽器不允許javaScript跨域訪問,據(jù)說為了安全,那咋辦,得用啊?!

              搜啊搜,找到一個(gè)文章專門討論這事兒的,作者提出了三種解決方案:

              1、在涉及到跨域訪問的頁(yè)面中加入

          <script language="JavaScript">
          <!--
          document.domain = "mycompany.com"; //指定 document 所屬的域
          -->
          </script>

          這樣可以蒙混過瀏覽器,但是這種方法必須滿足一個(gè)條件,就是兩個(gè)應(yīng)用必須屬于同一個(gè)父域,也就是,比如,abc.def.com父域就該是def.com,如果document.domain = "域名";設(shè)置的不是其父域,就會(huì)報(bào)“參數(shù)無(wú)效”的錯(cuò)誤。

                而問題是我們的報(bào)表服務(wù)器和業(yè)務(wù)系統(tǒng)服務(wù)器不在一個(gè)父域下,這條路是行不通了

               召集了公司幾個(gè)同事討論,最后得出兩個(gè)方案,一是改為彈出窗口,而是寫webservice

                考慮到工作量,修改要小,選擇了彈出窗口。

          2、是IE獨(dú)有了,就是彈出showmodaldialog,這種方法因?yàn)镮E升級(jí)又行不通了。

          3、就是通過服務(wù)器處理了。

          總結(jié),現(xiàn)在看來,解決這個(gè)問題就是1和3兩種方案,第一種是在客戶端處理,局限就是兩個(gè)應(yīng)用必須在同一個(gè)父域下,還有就是好像不是所有的瀏覽器支持設(shè)置domain。第二種就是通過服務(wù)器處理,這種方法好像勢(shì)必要刷新整個(gè)窗口,像我這種情況,一個(gè)頁(yè)面中有幾個(gè)fream的情況,像保留用戶設(shè)置的參數(shù),還么有想到好的解決方法。

          還想到一條路就是用ajax,這倒是實(shí)現(xiàn)了無(wú)刷新,但是我們的報(bào)表頁(yè)面展現(xiàn)是一個(gè)自定義的jsp標(biāo)簽,還是要服務(wù)器展現(xiàn),這條路沒走下去。

          參考文章

          posted on 2008-08-26 22:06 閱讀(5592) 評(píng)論(1)  編輯  收藏

          評(píng)論

          # re: javascript 跨域訪問 沒有權(quán)限的問題 2009-12-04 11:27 cjp

          我遇到了類似的情況,我的原因是缺少引用:
          using System.Web.Script.Services;
          然后:在定義的的【webservice】的類上缺少屬性【[ScriptService]】。
          我的類如下:
          //---------------------------------------------------------------
          //...默認(rèn)引用
          using System.Web.Script.Services;


          /// <summary>
          /// WS_DataValidate 的摘要說明,用于數(shù)據(jù)驗(yàn)證
          /// </summary>
          [WebService(Namespace = "http://tempuri.org/")]
          [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)]
          [ScriptService]
          public class WS_DataValidate : System.Web.Services.WebService
          {
          //.....您要添加的內(nèi)容
          }
          //------------------------------------------------------------  回復(fù)  更多評(píng)論   


          只有注冊(cè)用戶登錄后才能發(fā)表評(píng)論。


          網(wǎng)站導(dǎo)航:
           

          公告

          希望有一天

          我能用鼠標(biāo)雙擊我的錢包

          然后選中一張100元

          按住“ctrl+c”

          接著不停的“ctrl+v”

          嘻嘻~~~笑醒~~~



          導(dǎo)航

          <2009年12月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          統(tǒng)計(jì)

          常用鏈接

          留言簿(6)

          隨筆分類(102)

          隨筆檔案(398)

          文章分類

          文章檔案(10)

          有趣網(wǎng)絡(luò)

          搜索

          積分與排名

          最新評(píng)論

          閱讀排行榜

          評(píng)論排行榜

          主站蜘蛛池模板: 洪洞县| 开远市| 梁平县| 永仁县| 福清市| 金川县| 普安县| 内江市| 佛山市| 汤阴县| 宁安市| 涿州市| 甘肃省| 万盛区| 通河县| 丹巴县| 嘉荫县| 长垣县| 平遥县| 襄城县| 萨迦县| 海林市| 德州市| 贵阳市| 乌兰浩特市| 修水县| 南岸区| 华池县| 武乡县| 铁岭市| 诸暨市| 梅河口市| 遵义市| 璧山县| 夹江县| 乐昌市| 嘉祥县| 兰考县| 突泉县| 育儿| 始兴县|