快晴だけど寒い秋田より、こんにちは。
コンちゃんこと佐々木です。
windows8.1アプリを開発中です。
自分用メモとして、ボタンを押したときに別ページを開く方法を書きます。
開発は、Javascript+HTML(+css)です。
・先に参考サイトの紹介
・http://libro.tuyano.com/index3?id=1020006&page=4
・https://msdn.microsoft.com/ja-jp/library/windows/apps/hh452768.aspx
①リンク後者(msdn)の内容を一通り終える。ここでは、ボタン式リンクではなく、ただの文字列にリンクを張っている。
制作のワンシーンをどうぞ。
②そのページに、以下の記述を見つけ、やってみたいと思う。
ハイパーリンクの既定の動作を使う代わりに、自分で WinJS.Navigation.navigate を呼び出す必要があります。リンクをボタンに置き換え、このボタンのクリック イベント ハンドラーを使って WinJS.Navigation.navigate を呼び出すことができます。
③home(home.html,home.js)からpage2(page2.html,page2.js)に移動したい。
home.htmlに、以下を書いてみるが、失敗する。
<button id="gotopage2Button" onclick="linkClickEventHandler(eventInfo)">Page2</button>
④③をコメントアウトし、home.jsに以下の1行目を書くが、失敗する。
1行目をコメントアウトして2行目を書くが、失敗する。
document.getElementById("gotopage2Button2").addEventListener("click",linkClickEventHandler,false);
document.querySelector("#gotopage2Button2").addEventListener("click",linkClickEventHandler,false);
⑤home.jsは以下で成功した。home.htmlも載せる。移動先であるpage2は何も変更せずに良かった、が、一応載せる。
(function () {
"use strict";
WinJS.UI.Pages.define("/pages/home/home.html", {
// この関数は、ユーザーがこのページに移動するたびに呼び出されます。
// ページ要素にアプリケーションのデータを設定します。
ready: function (element, options) {
// TODO: ここでページを初期化します。
WinJS.Utilities.query("a").listen("click", linkClickEventHandler, false);
//document.querySelector("#gotopage2Button2").addEventListener("click", linkClickEventHandler, false);
id("gotopage2Button2").addEventListener("click", function () {
WinJS.Navigation.navigate("pages/page2/page2.html");
}, false)
}
});
// added by conchan_akita 2015.03.08
function linkClickEventHandler(eventInfo) {
eventInfo.preventDefault();
var link = eventInfo.target;
WinJS.Navigation.navigate(link.href);
}
function id(elementId) {
return document.getElementById(elementId);
}
})();
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta charset="utf-8" />
<title>homePage</title>
<link href="/css/default.css" rel="stylesheet" />
<link href="/pages/home/home.css" rel="stylesheet" />
<script src="/pages/home/home.js"></script>
</head>
<body>
<!-- 読み込まれて表示されるコンテンツです。 -->
<div class="fragment homepage">
<header aria-label="Header content" role="banner">
<h1 class="titlearea win-type-ellipsis">
<span class="pagetitle">ナビゲーション テンプレート!</span>
</h1>
</header>
<section aria-label="Main content" role="main">
<p>コンテンツをここに挿入。</p>
<p><a href="/pages/page2/page2.html">Go to page2.</a></p>
<br />
<!--
<button id="gotopage2Button" onclick="linkClickEventHandler(eventInfo)">Page2</button>
-->
<button id="gotopage2Button2">Page2</button>
</section>
</div>
</body>
</html>
続いてpage2系。
(デフォから無変更のpage2.cssは載せない)
// ページ コントロール テンプレートの概要については、次のドキュメントを参照してください:
// http://go.microsoft.com/fwlink/?LinkId=232511
(function () {
"use strict";
WinJS.UI.Pages.define("/pages/page2/page2.html", {
// この関数は、ユーザーがこのページに移動するたびに呼び出されます。
// ページ要素にアプリケーションのデータを設定します。
ready: function (element, options) {
// TODO: ここでページを初期化します。
// added by conchan_akita 2015.03.08
// hh452768.aspx
var dayPlaceHolder = document.querySelector("#dayPlaceHolder");
var calender = new Windows.Globalization.Calendar();
dayPlaceHolder.innerText = calender.dayOfWeekAsString();
},
unload: function () {
// TODO: このページからの移動に対応します。
},
updateLayout: function (element) {
/// <param name="element" domElement="true" />
// TODO: レイアウトの変更に対応します。
}
});
function id(elementId) {
return document.getElementById(elementId);
}
})();
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<meta charset="utf-8" />
<title>page2</title>
<link href="page2.css" rel="stylesheet" />
<script src="page2.js"></script>
</head>
<body>
<div class="page2 fragment">
<header class="page-header" aria-label="Header content" role="banner">
<button class="back-button" data-win-control="WinJS.UI.BackButton"></button>
<h1 class="titlearea win-type-ellipsis">
<span class="pagetitle">page2 へようこそ</span>
</h1>
</header>
<section class="page-section" aria-label="Main content" role="main">
<p>コンテンツをここに挿入。</p>
<p>今日は <span id="dayPlaceHolder"></span> です。</p>
</section>
</div>
</body>
</html>
画像あるといいなーって思ったので、2枚。
ところで、エラー出たときにnavigator.jsの112行目、以下が示された。
return WinJS.UI.Pages.render(args.detail.location, newElement, args.detail.state);
結局、参考リンク1つ目の
WinJS.UI.Pages.render
をやっていたのだー。
以上、それでは失礼します。


