Loading...

          java .net

          javascript 跨域訪問 沒有權限的問題

                公司買的報表工具,為了節省成本,將報表服務單獨部署了一個應用,我們的業務系統調用報表應用展現報表,開發還算順利,現在到了用戶試用了,問題來了

               其中有個功能叫報表反查,頁面中包含了四個fream,用戶在其中三個fream中設置查詢條件,當點擊查詢按鈕,調用javascript得到每個fream中的參數,并將參數賦值到第四個fream中的form中的隱藏屬性中,然后提交這個form(這時的form是在業務系統中的jsp)調用報表服務器的action,返回報表(此時的是報表應用返回的頁面,不再是業務系統中的jsp了)。

               這涉及到了兩個應用,再次點擊查詢按鈕,Ie就會報“沒有權限”錯誤。

              在網上搜,一個結論,瀏覽器不允許javaScript跨域訪問,據說為了安全,那咋辦,得用啊?!

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

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

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

          這樣可以蒙混過瀏覽器,但是這種方法必須滿足一個條件,就是兩個應用必須屬于同一個父域,也就是,比如,abc.def.com父域就該是def.com,如果document.domain = "域名";設置的不是其父域,就會報“參數無效”的錯誤。

                而問題是我們的報表服務器和業務系統服務器不在一個父域下,這條路是行不通了

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

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

          2、是IE獨有了,就是彈出showmodaldialog,這種方法因為IE升級又行不通了。

          3、就是通過服務器處理了。

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

          還想到一條路就是用ajax,這倒是實現了無刷新,但是我們的報表頁面展現是一個自定義的jsp標簽,還是要服務器展現,這條路沒走下去。

          參考文章

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

          評論

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

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


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


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           

          公告

          希望有一天

          我能用鼠標雙擊我的錢包

          然后選中一張100元

          按住“ctrl+c”

          接著不停的“ctrl+v”

          嘻嘻~~~笑醒~~~



          導航

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

          統計

          常用鏈接

          留言簿(6)

          隨筆分類(102)

          隨筆檔案(398)

          文章分類

          文章檔案(10)

          有趣網絡

          搜索

          積分與排名

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 桐庐县| 鞍山市| 玉龙| 桐城市| 双江| 土默特左旗| 延长县| 吉隆县| 崇州市| 垦利县| 益阳市| 阳泉市| 綦江县| 漠河县| 彰化市| 光山县| 克东县| 筠连县| 凉城县| 浪卡子县| 黄浦区| 姚安县| 清苑县| 乾安县| 绥棱县| 龙门县| 田东县| 西藏| 五台县| 任丘市| 托里县| 乌拉特前旗| 上饶市| 永城市| 浏阳市| 靖江市| 铁力市| 裕民县| 内江市| 滨州市| 溧水县|