2011-06-18 66 views
4

我正在構建一個文件上傳API。如何處理跨域iframe文件上傳json響應?

基本上,用戶必須將他/她的api_key +簽名文件發佈到我的web服務。然後我的Web服務回覆一個JSON響應。我想知道這個過程如何異步工作?

假設用戶以將表單設置爲iframe的形式發送請求。 JSON響應將在其內容類型設置爲「text/html」的他/她的iframe中發回給用戶。它被設置爲「text/html」而不是「application/json」,因爲我想避免瀏覽器在JSON響應周圍注入「pre」標記。無論如何,如果iframe和父窗口具有不同的域,用戶如何閱讀該JSON響應?將會出現跨域策略問題。

動態創建「script」標記加JSONP在這種情況下不起作用,因爲我需要POST才能上傳。 JSONP僅適用於GET請求。

+0

回答我自己的問題。我使用html5 postmessage從iframe(域B)發送json到父域(域A)。在域A中,然後eval()將消息轉換爲對象。你看到有這樣的問題嗎?即安全問題? – woran

回答

0

由於同源策略,瀏覽器不允許在主框架中讀取/訪問來自其他域的iframe中的任何內容。在這種情況下,用戶將不得不使用easyXDM或創建自己的代理 - 通過代理在這裏,我的意思是用戶將不得不在他們的後端編寫一些代碼,以便與您的API進行通信,以便發送請求將直接發送到您的服務器,並獲得迴應將從他們自己的代理。

+0

你怎麼看待使用html5 postmessage呢?用戶可以使用定位到iframe的POST請求來上傳文件。然後,web服務以文本/ html內容類型進行響應,該文本的腳本標籤包含了一個top.postMessage('「。$ json。」','http://「。$ callback_domain。」')用戶頁面只需要父窗口上的事件偵聽器來捕獲此消息。然後他/她可以eval()那個json字符串並將其轉換爲對象。 – woran

1

看一看'Upload'示例here。它使用跨域消息將消息傳遞迴上傳頁面,並使用easyXDM支持所有瀏覽器。

This post解釋了它是如何工作的!