我目前正在尝试将扩展的初始屏幕添加到我的应用中,一旦它完成了RSS Feed的下载并在该Feed中找到了有效的高分辨率图像以将其制作为缩略图,该屏幕会自动删除自身(在应用的首次启动时可能需要5秒钟以上的时间,而用户只能看到空白屏幕)。

不幸的是,MSDN扩展启动画面示例并不是很有帮助,因为它们通过按下按钮而不是等待各种嵌套功能完成来关闭它们。我发现的其他示例跳过了一些重要的细节,这些细节对应用程序编程相对较新的人员没有帮助。

app.onactivated = function (args) {
    if (args.detail.kind === activation.ActivationKind.launch) {
        if (args.detail.previousExecutionState !== activation.ApplicationExecutionState.terminated) {
            // TODO: This application has been newly launched. Initialize
            // your application here.
        } else {
            // TODO: This application has been reactivated from suspension.
            // Restore application state here.
        }

        performSetupTasks();
        // Retrieve splash screen object.
        var splash = args.detail.splashScreen;
        // Display the extended splash screen.
        displayExtendedSplash(splash);

        args.setPromise(WinJS.UI.processAll().then(removeExtendedSplash()));
    }
};

而是上面的代码立即删除了扩展的初始屏幕。我需要向代码报告performSetupTasks()不完整添加任何内容吗?

最佳答案

问题在于您可能正在performSetupTasks();方法中进行异步操作。

重构您的代码以返回该 promise ,因此,只有在实现该 promise 后,才会删除初始屏幕:

function removeExtendedSplash() {
    var promise = WinJS.xhr(...);
    promise.then(function(result) { ... });
    return promise;
}
args.setPromise(removeExtendedSplash());
您也可以尝试以下扩展的初始屏幕实现:https://gist.github.com/petertakacs/5330117

10-05 22:52
查看更多