2010-07-04 61 views
2

我們有一個基於.net的應用程序託管在SAP企業門戶iframe中。 SAP門戶的域名是al.xx.companyname.com。 .Net應用程序服務器的域名是ss.xx.companyname.comJavaScript權限被拒絕。如何在可信域之間允許跨域腳本?

現在,當我通過企業門戶打開應用程序時,出現'Permission denied'JavaScript錯誤。我在IE中啓用了腳本調試,然後將Visual Studio調試器附加到JavaScript錯誤中。我注意到從下面的JavaScript代碼拋出錯誤來設置/重置髒標誌。

if(top.EPCM!=null) 

可以理解的是,這個問題是由於跨域腳本造成的。即ss.xx.companyname.com的應用程序服務器試圖訪問域al.xx.companyname.com的企業門戶的瀏覽器組件。

但是,這個跨腳本是一個受信任的域腳本,我想以某種方式允許這個跨腳本。我試圖設置應用程序服務器的主DNS後綴。遵循以下方法。

  1. 右鍵單擊我的電腦的應用程序服務器。 (在Windows 2003服務器,順便說一句)
  2. 選擇屬性 - 計算機名
  3. 單擊更改按鈕,並在接下來的窗口中點擊更多按鈕
  4. 而根據本計算機」文本框的the'Primary DNS後綴,我進入價值 - al.xx.companyname.com。

現在經過上述設置,我假設企業門戶和應用服務器的域將被視爲al.xx.companyname.com。但是,我仍然在上面提到的相同的JavaScript代碼中獲得了JavaScript權限被拒絕的錯誤。

正如答覆中所建議的,我還實施了document.domain方法。

var requireddomain = 'al.xx.companyname.com'; 
var text = document.domain; //returns the domain as ss.xx.companyname.com 

if (text != requireddomain) 
     { 
      for (i=0; i < 2; i++) 
      { 
       dotposition = text.indexOf("."); 
       text = text.substr(dotposition +1); 
      } 
      document.domain = text; 
     } 

    if(top.EPCM!=null) 

與上面的代碼中,document.domain的對象被設置爲companyname.com其是共有的企業門戶和應用服務器。 但是,仍然被拒絕的權限問題拋出行>> if(top.EPCM!= null)

這個問題在過去3天我的頭腦。有人可以幫助我嗎? 目標是允許應用程序服務器和可信連接的企業門戶之間的跨域腳本編寫。謝謝。

更新:

有趣&令人沮喪的發展。我已經在我的應用程序服務器中安裝了SSL證書。仍然拒絕錯誤的權限被拋出。

  • 門戶網站域名:al.xx.companyname.com
  • 應用程序域:ss.xx.companyname.com

我試圖document.domain屬性下設置爲2個層次,即到companyname.com。

但仍然發生'權限被拒絕的錯誤'。

我想,只有當應用程序域是門戶域的子集時,document.domain的設置纔會起作用。即

  • 門戶域:al.xx.companyname.com
  • 應用域:ss.al.xx.companyname.com。

在上述情況下,我可以將應用程序域縮減爲一個子層(向al.xx.companyname.com)。那麼我想,它會起作用。

但在我的情況下,門戶和應用程序服務器是同一個companyname.com的2個分支子域,因此仍然不允許跨腳本。

關於如何進行的任何建議?

+0

我不認爲將兩個系統設置爲相同的域名是可能的。除了瀏覽器問題,這會造成嚴重的問題,你不覺得嗎?請求如何知道要訪問哪個系統?請發佈'SetDomain()'的代碼,我們可能會更有幫助。 – JAL 2010-07-04 14:47:31

+0

嗨,亞歷克斯,錯誤拋出行>> if(top.epcm!= null)本身。 所以問題在於訪問企業門戶組件(EPCM)。 – HVS 2010-07-04 15:05:16

+0

@ vs1984不一定:問題可能是訪問「頂部」。該頁面是否也包含'document.domain'指令? – 2010-07-04 16:33:49

回答

7

同源策略可能非常嚴格,即使對於可信站點也不會產生異常。

的跨瀏覽器document.domain屬性應該能夠解決這個問題:

有一個例外相同的產地來源規則。腳本可以將document.domain的值設置爲當前域的後綴。如果是這樣,則較短的域用於隨後的原點檢查。例如,假設文檔中的腳本http://store.company.com/dir/other.html執行以下語句:

document.domain =「company.com」;

+0

嗨;我遵循將domain設置爲companyname.com的document.domain方法。我編輯了問題中的代碼。 但是,問題仍然存在。你能檢查我是否做錯了什麼? – HVS 2010-07-04 16:04:12

+0

@ vs1984您需要在每個頁面和每個框架中設置「document.domain」。是這樣嗎? – 2010-07-04 16:05:38

+0

@皮卡 - 是的。上面的代碼是在每個頁面中包含的通用JavaScript文件中實現的。 – HVS 2010-07-04 16:32:19