0

Я разработал универсальное приложение Windows 10 с использованием Html, css и JS. Для разрешения встроенных скриптов я использую ms-appx-web context и установил ms-appx-web: ///login.html как стартовую страницу в манифесте. Всякий раз, когда я открываю свое приложение в мобильном устройстве Windows 10, он отлично работает, но если я переключусь на другое приложение, а затем снова зайдите в приложение, выбрав его из списка приложений Windows. Затем он вместо возобновления приложения из сохраненного состояния перезапускает его.Универсальное приложение Windows 10 не возобновляется с предыдущей сессии

(function() { 
    "use strict"; 

    var app = WinJS.Application; 
    var activation = Windows.ApplicationModel.Activation; 

    app.onactivated = function (args) { 
     if (args.detail.kind === activation.ActivationKind.launch) { 
      if (args.detail.previousExecutionState === activation.ApplicationExecutionState.terminated) { 
      } 
      if (WinJS.Application.sessionState.url) { 
       localStorage.setItem("UserName", WinJS.Application.sessionState.name); 
       window.location = WinJS.Application.sessionState.url; 
      } 
      args.setPromise(WinJS.UI.processAll().then(function() { 
      })); 
     } 

    }; 

    app.oncheckpoint = function (args) { 
     var location = window.location.href; 
     var name = localStorage.getItem("UserName"); 
     WinJS.Application.sessionState.name = name; 
     WinJS.Application.sessionState.url = location; 
    }; 

    Windows.UI.WebUI.WebUIApplication.addEventListener("resuming", function (args) { 
     if (WinJS.Application.sessionState) { 
      window.location = WinJS.Application.sessionState.url; 
      localStorage.setItem("UserName", WinJS.Application.sessionState.name); 
     } 
    }, false); 
    Windows.UI.WebUI.WebUIApplication.addEventListener("suspending", function (args) { 
     var location = window.location.href; 
     var name = localStorage.getItem("UserName"); 
     WinJS.Application.sessionState.name = name; 
     WinJS.Application.sessionState.url = location; 
    }, false); 

    app.start(); 

})(); 

Может ли кто-нибудь предложить мне, что я делаю неправильно?

я изменил свое app.onactivated событие в main.js

app.onactivated = function (args) { 
    if (args.detail.kind === activation.ActivationKind.launch) { 
     if (args.detail.previousExecutionState !== activation.ApplicationExecutionState.terminated) { 

     } else { 

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

     var name = Windows.Storage.ApplicationData.current.roamingSettings.values["name"]; 
     var url = Windows.Storage.ApplicationData.current.roamingSettings.values["url"]; 

     if (name) { 
      localStorage.setItem("UserName", name); 
     } 
     if (url) { 
      window.location.href = url; 
     } 
    } 
}; 

Но останавливается на window.location.href = url; линии.

Что я пытаюсь сделать, это магазин имя пользователя и текущим URL о приостановке события и хочет восстановить его резюме события (когда пользователь открывает приложение из списка приложений, который уже работает.)

+0

Если вы используете 'ms-appx-web: ///' в своем приложении, пространство имен Windows даже не доступно. Мне любопытно, как вы можете запускать приложение без каких-либо ошибок. Не могли бы вы поделиться основной демонстрацией, которая может воспроизвести вашу проблему? –

+0

Я добавил ApplicationContentUriRules в файл манифеста ' ' – Sonali

+0

Я только хочу возобновить свое приложение, откуда оно осталось. без использования WinJS.Navigation.Navigate. – Sonali

ответ

0

, но если я перейдите в другое приложение, а затем снова зайдите в приложение, выбрав его из списка приложений Windows. Затем он вместо возобновления приложения из сохраненного состояния перезапускает его.

Я думаю, что вы не используете одностраничную навигацию для своего приложения.

Пожалуйста, обратитесь к Single-page navigation: the recommended model:

Контекст сценарий разрушается и должен быть инициализирован снова. Приложение может получать системные события, но не обрабатывать их, поскольку контекст скрипта уничтожается и повторно инициализируется.

Итак, контекст скрипта уже уничтожен после перехода на другую страницу.

Чтобы устранить эту проблему, лучшим решением является сделать ваше приложение одним запрограммированным приложением. И перемещайте страницы, используя PageControl. Вы можете обратиться к Quickstart: Using single-page navigation, чтобы начать.

Update:

, но когда я использую window.location.href для перенаправления в main.js закрывает приложение.

Это потому, что вы используете его в скрипте WinJS. Когда вы покидаете страницу, сценарий сценария WinJS будет уничтожен и, таким образом, будет выполняться код внутри crash приложения. Чтобы исправить это, вы можете использовать окно жизненного цикл API вместо:

var roaming=Windows.Storage.ApplicationData.current.roamingSettings; 

Windows.UI.WebUI.WebUIApplication.addEventListener("activated", function (args) { 
    if (args.detail[0].kind === activation.ActivationKind.launch) { 
     if (roaming.values["currentUri"]) { 
      window.location.href = roaming.values["currentUri"]; 
     } 
    } 
}); 

Windows.UI.WebUI.WebUIApplication.addEventListener("suspending", function (args) { 
    roaming.values["currentUri"] = window.location.href; 
    roaming.values["UserName"] = evt.srcElement.value; 
    //save the other information of the page here 
}); 

Windows.UI.WebUI.WebUIApplication.addEventListener("resuming", function (args) { 
    var roam = Windows.Storage.ApplicationData.current.roamingSettings; 
    if (roam) { 
     if (roam["currentUri"]) 
     { 
      window.location.href = roam["currentUri"]; 
     } 
    } 
}, false); 

Вы также можете обратиться к моим demo.

Примечания: Если вы вообще не используете WinJS, просто удалите ссылку. Загрузка библиотеки WinJS на каждую страницу неэффективна.

+0

Как мне связать событие с кнопкой «Назад»? – Sonali

+0

Так что будет замена для 'app.onbackclick = функция (арг) { \t если (window.location.href.includes ("login.html")) \t { \t app.stop(); \t} \t прочее { \t window.history.back(); \t return true; \t} }; ' – Sonali

+0

' var hardwareButtons = Windows.Phone.UI.Input.HardwareButtons; hardwareButtons.addEventListener ("backpressed", function (e) { // делать }); 'я использовал это. – Sonali

0

Я изменил свой основной.js as:

(function() { 
"use strict"; 

//No need of WinJS 
var activation = Windows.ApplicationModel.Activation; 
var roaming = Windows.Storage.ApplicationData.current.roamingSettings; 

// For App Start Up 
Windows.UI.WebUI.WebUIApplication.addEventListener("activated", function (args) { 
    if (args.detail[0].kind === activation.ActivationKind.launch) { 
     if (roaming.values["currentUri"]) { 
      if (roaming.values["UserName"]) 
      { 
       localStorage.setItem("UserName", roaming.values["UserName"]); 
       window.location.href = roaming.values["currentUri"]; 
      } 
     } 
    } 
}); 

// For App Suspension 
Windows.UI.WebUI.WebUIApplication.addEventListener("suspending", function (args) { 
    roaming.values["currentUri"] = window.location.href; 
    roaming.values["UserName"] = localStorage.getItem("UserName"); 
}); 

// For Resuming App 
Windows.UI.WebUI.WebUIApplication.addEventListener("resuming", function (args) { 
    var roam = Windows.Storage.ApplicationData.current.roamingSettings; 
    if (roam) { 
     if (roam.values["currentUri"]) { 
      localStorage.setItem("UserName", roam.values["UserName"]); 
      window.location.href = roam.values["currentUri"]; 
     } 
    } 
}, false); 
// not working backpressed event 
Windows.UI.WebUI.WebUIApplication.addEventListener("backpressed", function (args) { 
    // to do 
}, false);})(); 

Все работает нормально. Но я не знаю, как добавить обратно событие нажатия клавиши без использования winjs. Может ли кто-нибудь мне предложить? How to add back key press event without winjs?