4

我正在尝试在 javascript 后台任务中从我的应用程序访问 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);

})();

该任务似乎工作正常,但我无法确定是否可以访问数据库(或任何应用程序资源)。这种事情甚至可能吗,如果是的话,我错过了什么?

4

3 回答 3

4

根据http://msdn.microsoft.com/en-us/library/windows/apps/hh453270.aspx,商店应用程序中的 WorkerGlobalScope(在您处于后台任务时有效)使 indexedDB 可用。IndexedDB 在本地 appdata 中工作,因此应该可以用作任何其他 appdata 操作。

一般来说,后台任务可以修改应用数据并发布磁贴/吐司/徽章更新。正如 Slace 指出的那样,您无法访问其他应用程序资源,因此 appdata 是您与主应用程序共享数据的方式。

于 2012-11-01T17:16:23.357 回答
0

我认为后台任务在不同的线程上运行(因此它们没有相同的墓碑限制)并且无法访问应用程序资源。这就是即使在应用程序挂起时后台任务仍保持活动状态的方式,这意味着您无法访问应用程序资源。

于 2012-11-01T12:01:05.093 回答
0

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

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

于 2012-11-01T20:33:31.217 回答