2012-07-05 39 views
0

我正在使用WinJS Windows Metro應用程序,並在我的一個頁面上獲取要顯示爲背景的圖像的URL。通過使用url(圖像的URL)並將其設置爲style.backgroundImage,我可以很好地工作。在Windows Metro應用程序中緩存背景

我需要在鏈接頁面上使用相同的圖像,但這意味着我不得不做另一個HTTP請求,我試圖避免。我查看了備選方案並找到了LocalFolder作爲選項。唯一的問題是我不知道如何訪問該文件並將其設置爲背景。

這是正確的方式去緩存數據,以減少網絡電話?

下面是我使用的代碼:這取決於你想要的那種形象的轉移和多少的這些

function saveBackground(url) { 
    localFolder.createFileAsync("background.jpg", Windows.Storage.CreationCollisionOption.replaceExisting).then(function (newFile) { 
     var uri = Windows.Foundation.Uri(url); 
     var downloader = new Windows.Networking.BackgroundTransfer.BackgroundDownloader(); 
     var promise = downloader.createDownload(uri, newFile); 
     promise.startAsync().then(function() { 
      //set background here. 
      var wrapper = document.getElementById("wrapper").style; 
      localFolder.getFileAsync("background.jpg").then(function (image) { 

       console.log(image.path); 
       var path = image.path.split(""); 
       var newLocation = []; 
       //This is just to make the backslashes work out for the url() 
       for (var i = 0; i < path.length; i++) { 
        if (path[i] != '\\') { 
         newLocation.push(path[i]); 
        } else { 
         newLocation.push('\\\\'); 
        } 
       } 
       console.log(newLocation); 
       var newPath = newLocation.join(""); 
       var target = "url(" + newPath + ")"; 
       wrapper.backgroundImage = target; 
       console.log(wrapper.backgroundImage); 
       wrapper.backgroundSize = "cover"; 

      }); 
     }); 
    }); 
} 

回答

0

。如果只有一個圖像,而不是一個很重的圖像(大約< 5Mo),我建議您使用WinJS.xhr,它允許您下載數據,更重要的是一旦它被調用就下載數據。

BackgroundTransfer應該用於大數據,如視頻,音樂,大型圖像。

關於緩存你的圖像是的,你可以做到這一點當然與本地文件夾(你應該這樣做)。

你應該看看這個系列文章的大衛Catuhe提出這是真正偉大的

http://blogs.msdn.com/b/eternalcoding/archive/2012/06/15/how-to-cook-a-complete-windows-8-application-with-html5-css3-and-javascript-in-a-week-day-0.aspx

希望這有助於。