2012-11-01 45 views
4

我试图在javascript后台任务中从我的应用程序访问indexeddb(因此我可以更新活动磁贴)。在后台任务中访问Javascript Metro应用程序的IndexedDB

我设立的任务,像这样:

 var builder = new Windows.ApplicationModel.Background.BackgroundTaskBuilder(); 
     builder.name = taskName; 
     builder.taskEntryPoint = "js\\task\\backgroundTask.js"; 

     //Run every 8 hours if the device is on AC power 
     var trigger = new Windows.ApplicationModel.Background.MaintenanceTrigger(480, false); 
     builder.setTrigger(trigger); 

     var task = builder.register(); 

任务看起来是这样的:

(function() { 
    "use strict"; 

    var backgroundTaskInstance = Windows.UI.WebUI.WebUIBackgroundTaskInstance.current; 
    var cancel = false; 

    function doWork() { 
     var key = null, settings = Windows.Storage.ApplicationData.current.localSettings; 

     //todo access db and update tile 

     close(); 
    } 

    if (!cancel) { 
     doWork(); 
    } else { 
     close(); 
    } 

    function onCanceled(cancelSender, cancelReason) { 
     cancel = true; 
    } 

    backgroundTaskInstance.addEventListener("canceled", onCanceled); 

})(); 

任务似乎很好地工作,但我不能工作了,如果我能访问数据库(或任何应用程序资源)。这种事情是甚至可能的,如果有的话,我错过了什么?

+0

如果您访问indexeddb API并尝试写入数据,会发生什么情况? –

回答

4

根据http://msdn.microsoft.com/en-us/library/windows/apps/hh453270.aspx,Store应用程序中的WorkerGlobalScope在后台任务中生效时,会使indexedDB可用。 IndexedDB在本地应用程序数据中工作,因此应该可以用作任何其他应用程序数据操作。

一般来说,后台任务可以修改应用程序数据并发布tile/toast/badge更新。正如Slace所指出的那样,您无法访问其他应用程序资源,所以appdata是您如何与主应用程序共享数据的方式。

+0

真棒,会给它一个镜头 –

0

我认为后台任务运行在不同的线程上(这样他们没有相同的onombstoning限制)并且不能访问应用程序资源。这就是后台任务即使在应用程序暂停时仍然保持活动状态,这意味着您无法访问应用程序资源。

0

您可以在工作人员中使用IndexedDB API,但是您需要使用sync API

我与Windows 8开发人员的经验是,您不能在其中使用异步API。进行异步调用时,提供的回调函数将不会被调用。同样如Kraig所述,只能使用工作者范围可访问的API。 (您不能从窗口对象调用任何东西)。

相关问题