2010-09-22 87 views
1

這裏的目標是:跨域進行JavaScript調用

取消引用遠程服務器上JavaScript文件的腳本標記。該JavaScript文件應該返回HTML,然後將顯示在調用HTML頁面上。

我已經嘗試兩種方法可以解決這個:

首先,我試圖使用XMLHttpRequest在JavaScript中調用這個遠程服務器。在IE中,它會按預期工作,但FF,Safari和Chrome會返回空的響應。我從我的研究得到的總體迴應是,該請求被阻止,因爲它試圖訪問的服務器與其運行的位置不同(本地主機,但不同的端口)。

其次,我研究了Google Gadgets是如何工作的,因爲它們有效地爲您提供了引用外部JavaScript的簡單腳本標記。從我可以收集的信息來看,似乎有一些iframe操作只是簡單地通過使用基本url(下面的示例)進行。這似乎是要走的路,即使使用iframe不是我最初的想法。我猜測Google代碼正在將iframe作爲HTML返回到嵌入了此腳本的HTML文件中。

任何關於我應該如何進行的建議?

<script src="http://www.gmodules.com/ig/ifr?url=http://ralph.feedback.googlepages.com/googlecalendarviewer.xml&amp;synd=open&amp;w=320&amp;h=200&amp;title=&amp;border=%23ffffff%7C3px%2C1px+solid+%23999999&amp;output=js"></script> 

回答

2

JSONP是應對same origin policy一種很常見的方式。由於大多數javascript框架(例如jquery)已經支持它,所以您不必進入技術細節就可以使用它。
你也可以通過構建來自javascript的script標籤來自己動手(如你所提到的)。谷歌Analytics(分析)代碼段是這種方法的一個例子:

 var ga = document.createElement('script'); 
     ga.type = 'text/javascript'; 
     ga.async = true; 
     ga.src = 'url here'; 
     var s = document.getElementsByTagName('script')[0]; 
     s.parentNode.insertBefore(ga, s); 

至於iframe的想法(如果我理解你currectly),這是不是要去工作。您可以在頁面上使用iframe元素來顯示來自其他服務器的內容,但瀏覽器不會讓您使用javascript從主頁面訪問它。

編輯
這原提案的細節JSONP用法:
http://bob.pythonmac.org/archives/2005/12/05/remote-json-jsonp/