2010-11-19 195 views
3

免責聲明:我已經看了各種方法來解決我的問題,所以請標註這是一個重複的問題
跨域請求到localhost

前請閱讀我有一個JavaScript上運行https://xyz.com其中有從用戶的本地機器上運行的應用程序ABC檢索信息說8080端口

我的約束是,我不能修改HTTP頭散發形成ABC我也不希望用戶安裝其他應用程序,這將是一個導管路由我的r equests到ABC

跨域/窗消息選項

一)window.postMessage:排除了,因爲我不能有腳本在本地機器
B)XDR對象(IE中運行)或訪問控制允許來源(Firefox,Safari等):排除,因爲我無法修改標題
c)JSONP:再次這將不起作用,因爲我無法將函數名稱中的響應封入

作爲解決方法,僅用於測試,我已將http://xyz.com添加到受信任列表中,並已爲此列表上的站點啓用Access Data Across Domains。 AFAIK,此選項僅適用於IE 5+瀏覽器。此變通辦法可以讓我從http://127.0.0.1:8080
alt text

發送和接收消息我的問題是雙重的
1)如果我要繼續用上述方法,當我進入生產什麼是我的安全問題米暴露用戶?我可以堵住那些孔嗎?
2)是否有其他選擇可以實現我的目標?

PS:我想應該儘量遠離ActiveX或Flash作爲可能的,但在這是唯一可行的辦法,以我目前的做法話,那麼我將不得不言聽計從

乾杯

+0

我不明白,你目前的做法是什麼?那隻適用於IE? – 2010-11-19 20:45:32

+0

Felix,我添加了臨時變通辦法的屏幕截圖 – Philar 2010-11-19 21:00:40

+0

所以它實際上並不是一個真正的解決方法,因爲它只與IE一起工作;) – 2010-11-19 21:54:48

回答

0

我認爲最簡單的方法是在https://xyz.com上放置一個服務器腳本,它將充當javascript文件和ABC之間的橋樑。然後,JavaScript文件將簡單地向其自己的服務器腳本發送一個AJAX請求,該腳本將負責從遠程域獲取信息。唯一可行的解​​決方案可以在大多數瀏覽器中使用,並且不需要使用某些客戶端技術(如Flash或ActiveX),但JSONP卻排除了這種情況,因爲您無法控制遠程域。

+0

-1 xyz.com上的服務器腳本如何訪問客戶端本地主機上運行的服務? – 2010-11-19 20:50:58

+0

@Byron Whitlock,它有什麼不同?有一項服務在端口8080上運行。當然,如果這項服務不通過互聯網公開,只有上帝才能訪問它,所以在這種情況下問題是沒有意義的。我猜測OP意味着客戶端上的這個8080端口可以通過互聯網訪問。 – 2010-11-19 20:53:07

+0

Darin,對不起,如果我是懶惰的,在https://xyz.com上運行的腳本無法訪問用戶本地機器上的應用程序,因爲該端口未暴露於互聯網 – Philar 2010-11-19 20:58:12

1

如果本地應用程序可以爲單個html文檔提供服務,那麼您可以輕鬆使用跨文檔消息傳遞(例如easyXDM)以及來自此文檔的ajax請求來執行此操作。這是一種非常簡單的方法,也是一種常用的方法。

easyXDM實際上帶有這樣一個文件,你可以閱讀它here

+0

謝謝肖恩,我會測試這個並恢復 – Philar 2010-11-28 05:23:06