2010-08-12 83 views
0

我正在開發JavaScript API服務。主html頁面如下所示:跨站點javascript問題

<html> 
<head> 
    <script type="text/javascript" src="scripts/logic.js"></script> 
    <script type="text/javascript" src="scripts/jquery-1..."></script> 
    <script type="text/javascript" src="http://mydomain/api/main.js"></script> 
</head> 
... 
</html> 

在main.js腳本中,我從mydomain加載另一個腳本。我正在通過添加腳本標記([script .. src =「http://mydomain/api/getsomedata.js?callback_id = 3434 & someparams = ...」])來執行此操作。加載的腳本直接調用API回調函數:MyApi.processCallback(...)。一切正常。

但是當我試圖從本地文件(logic.js)加載另一個mydomain腳本時,我收到了非常奇怪的情況:所有腳本全局對象都是未定義的。沒有MyApi對象或jQuery $對象在前面的調用中可見。所以我不能調用MyApi回調函數。

也許是因爲安全限制。反XSS或類似的東西。我嘗試添加X-XSS-Protection標頭,就像所有Google JavaScript API一樣。但它沒有幫助。

我不使用IFRAMES。

這個問題可以完全解決,因爲許多跨站點JavaScript API都可以在同一個想法上運行(Google Maps API等)。

回答

0

腳本中發生了什麼?

如果您正在執行Ajax調用回域,您的腳本將失敗並出現相同原點安全性錯誤。如果您需要從另一個域與服務器進行通信,則需要使用JSONP來執行此操作。如果您只使用現代瀏覽器,則可以使用CORS