我试图从我的应用程序访问indexeddb(所以我可以更新实时磁贴)在
JavaScript后台任务中.
我正在设置这样的任务:
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); })();
该任务似乎工作正常,但如果我可以访问数据库(或任何应用程序资源),我无法解决.这种事情是否可能,如果是这样,我错过了什么?
解决方法
根据
http://msdn.microsoft.com/en-us/library/windows/apps/hh453270.aspx,Store应用程序中的WorkerGlobalScope(当您处于后台任务时生效)使indexedDB可用. IndexedDB在本地appdata中工作,因此应该可以用作任何其他appdata操作.
一般而言,后台任务可以修改应用数据并发布平铺/吐司/徽章更新.正如Slace指出的那样,您无法访问其他应用资源,因此appdata就是您与主应用共享数据的方式.