ウェブサイトを Windows 10 で動く Universal Windows Platform(UWP)アプリにしてみる その2 - ネイティブ命令を実行してみる
前回
今回つくるもの
ネイティブ機能を呼び出しタイトルバーに戻るボタンを付ける。
JavaScript 版の UWP アプリは C# の名前空間、クラスを使いメソッドやプロパティを取得できネイティブの機能(Windows Runtime)を実行できます。
(注:JavaScript から Windows Runtime の機能にアクセスしますが、JavaScript から すべての機能が使えるわけではありません)
たとえば Windows Phone で環境光センサーを取得するにはこのように書きます
問題は公開されているサイトではブラウザで開いた時 Windows というオブジェクトがなくエラーになります。
下記のように Windows を調べてから実行しましょう。
ちなみに、以下のサンプルでは UI がらみですので Windows.UI を使っていますが、現状 Windows.UI が使えないものが IoT ぐらいで、IoT では JavaScript 版のアプリが動作せず、Windows.UI を判別する処理をしていません。
状況によってはプラットフォーム別で使えるネームスペース、クラス、メソッド、プロパティなどなど判別する必要が出てくるかもしれません。
今回のサンプル
http://toshihirogoto.github.io/ProjectWestminster/
上記の URL 以前制作した Bing を読み込むだけのアプリの URL を変更してビルドするとこのようになります。
ブラウザ版とは違い、ボタンが出現します
ボタンを押すとタイトルバーに戻るボタンが出て、タイトルバーの戻るボタンを押すと表示が戻ります。
中身
Windows.UI.Core.SystemNavigationManager の getForCurrentView() で現在のウインドウのタイトルバーの状態を取ります
getForCurrentView() の appViewBackButtonVisibility に Windows.UI.Core.AppViewBackButtonVisibility.visible をぶち込むとタイトルバーに戻るボタンがつきます。
消す場合は Windows.UI.Core.AppViewBackButtonVisibility.collapsed。
戻るボタンが押された際は getForCurrentView() の onbackrequested か、backrequested のイベントリスナに関数を登録します。
参考元
Universal Windows Platform appでタイトルバーに戻るボタンを出す方法 - かずきのBlog@hatena
Universal Windows Platform appでタイトルバーに戻るボタンを出す方法 その2 - かずきのBlog@hatena
余談
ダブレットモードでは戻るボタンの見た目と振る舞いが変わります。
タブレットモードボタンなどでタブレットモードになると 8.1 のように最上部にカーソルを持っていくとタイトルバーが出ます
また、左下のスタートボタンの横にも戻るボタンがつきます。
そのままですとタブレットモードでバックボタンを押した場合、スタートに戻ってしまいます。
戻るボタンでイベントを登録した onbackrequested で Windows.UI.Core.SystemNavigationManager.handled を true にするとスタートに戻らなくなります。
ですが onbackrequested は戻るボタンが押される場合に必ず読まれるため、最初のページに来た際は false 変える必要があります。
この処理をしないとこのアプリのバックボタンでは永遠にスタート画面に戻ることができません。
今回はグローバル変数をつくってページ遷移をカウントするというおバカな方法を使っています。
なんかよい方法があったら教えていただけるとありがたいです。
今回使用されている Windows Runtime のクラスやメソッドやプロパティ(英語)
SystemNavigationManager class - Windows app development
AppViewBackButtonVisibility enumeration - Windows app development
SystemNavigationManager.BackRequested | backrequested event - Windows app development
SystemNavigationManager.GetForCurrentView | getForCurrentView method - Windows app development
BackRequestedEventArgs.Handled | handled property - Windows app development