2012-08-27 106 views
1

我目前正在開發加載外部資源的HTML5遊戲。目前,我使用XMLHttpRequest的文件中讀取,但無法在Chrome工作,導致爲非託管的HTML5應用程序加載外部文件

XMLHttpRequest cannot load file:///E:/game/data.txt 
Cross origin requests are only supported for HTTP. 

的文件在同一目錄HTML5文件。

問題:

  1. 有沒有什麼辦法了HTML5應用程序使用XMLHttpRequest(或其他 法)在外部文件來加載,而不需要它是 託管在一個Web服務器?

  2. 如果我將HTML5代碼打包爲支持HTML5的平板電腦/手機 上的應用程序,XMLHttpRequest是否能夠加載外部 文件?

回答

1
  1. (一)是,也不是。作爲安全策略的一個問題,XHR在傳統上一直都是同一協議(即:http://,而不是file:///),並且傳統上一直是同域的在同一個子域中 - http://pages.site.com/index無法從http://scripts.site.com/獲取文件)。跨域請求現在可用,但無論如何,它們都需要Web服務器,託管該文件的服務器必須專門接受請求。 (b)因此,以迂迴的方式,答案是肯定的,一些實現可能(不正確)允許您通過XHR抓取文件,即使頁面以文件系統術語發言,而不是http請求(老版本的瀏覽器)......但除此之外,你將需要一種或另一種Web服務器。好消息是它們很容易安裝。 EasyPHP就足夠了,它幾乎是一個3點擊解決方案。還有無數其他人。這只是首先想到的關於大腦安裝的問題,如果你想要的只是apache中的文件服務器,並且你不打算使用服務器端腳本語言(或者如果你打算使用PHP)。

  2. 的XMLHttpRequest絕對會能夠得到外部文件...
    IF他們實際上是外部的(即:在一個特定的手機高速緩存未捆綁 - 使用手機內置的文件 - 訪問API,並編寫一個包裝器來處理每個具有相同定製接口的包),AND手機當前有接收 - 準備處理故障條件(如具有默認設置對象,或有錯誤處理或任何最好的情況下,無論缺少什麼)。

    另請參閱Application Cache Manifests。同樣,這是一個html5解決方案,不同版本的不同手機的處理方式不同(早期與標準化格式相比)。 不要在開發過程中使用它,因爲它會使測試代碼/內容變化非常慢並且疼痛,但是當您的產品幾乎完成並且沒有bug時,以及在啓動之後幾秒鐘內,瀏覽器將所有內容永久存儲,以便他們可以脫機播放,並且可以保存各種帶寬,而無需在下次播放時下載所有內容。

相關問題