私は Windows 8 アプリで作業しており、アプリを前後に実行するためにリンク履歴を使用するページから、外部 Web サイト (例: facebook または私のサイト) へのリンクも 3 つまたは 4 つ持っています。それらを iframe で実行しようとしたり、単純なリンクのようにデフォルトのブラウザで開いたりしようとしました。どちらの方法でも、base.js で、エラーを処理できないというエラーが発生しました (!?) ここで質問する前に、よく検索しました。正常に動作する msdn サンプルを見ましたが、アプリで必要なものをコピーすると同じエラーが発生します。転送履歴がない別のページから使用しますが、機能しますが、フロントページで本当に必要です。アイデアはありますか?どうもありがとうございました。
ル:
これは私のitems.js
コードです: ( items.html ページの場合)
(function () {
"use strict";
var appViewState = Windows.UI.ViewManagement.ApplicationViewState;
var ui = WinJS.UI;
ui.Pages.define("/pages/items/items.html", {
// This function is called whenever a user navigates to this page. It
// populates the page elements with the app's data.
ready: function (element, options) {
var listView = element.querySelector(".itemslist").winControl;
listView.itemDataSource = Data.groups.dataSource;
listView.itemTemplate = element.querySelector(".itemtemplate");
listView.oniteminvoked = this._itemInvoked.bind(this);
this._initializeLayout(listView, Windows.UI.ViewManagement.ApplicationView.value);
listView.element.focus();
WinJS.Utilities.query("a").listen("click", this.linkClickEventHandler, false);
},
// This function updates the page layout in response to viewState changes.
updateLayout: function (element, viewState, lastViewState) {
/// <param name="element" domElement="true" />
var listView = element.querySelector(".itemslist").winControl;
if (lastViewState !== viewState) {
if (lastViewState === appViewState.snapped || viewState === appViewState.snapped) {
var handler = function (e) {
listView.removeEventListener("contentanimating", handler, false);
e.preventDefault();
}
listView.addEventListener("contentanimating", handler, false);
var firstVisible = listView.indexOfFirstVisible;
this._initializeLayout(listView, viewState);
if (firstVisible >= 0 && listView.itemDataSource.list.length > 0) {
listView.indexOfFirstVisible = firstVisible;
}
}
}
},
linkClickEventHandler: function (eventInfo) {
eventInfo.preventDefault();
var link = eventInfo.target;
WinJS.Navigation.navigate(link.href);
},
// This function updates the ListView with new layouts
_initializeLayout: function (listView, viewState) {
/// <param name="listView" value="WinJS.UI.ListView.prototype" />
if (viewState === appViewState.snapped) {
listView.layout = new ui.ListLayout();
} else {
listView.layout = new ui.GridLayout();
}
},
_itemInvoked: function (args) {
var groupKey = Data.groups.getAt(args.detail.itemIndex).key;
WinJS.Navigation.navigate("/pages/split/split.html", { groupKey: groupKey });
}
});
})();
また、items.html からさまざまな種類のリンクがあります。他のアプリケーション ページへのリンクもあれば、履歴ボタンで戻る/進むことができるものもあれば、外部ページへのリンクもあります。単純<a href="http://www.example.com">link</a>
です。これらのリンクは、以下で説明したエラーでアプリをクラッシュさせます。次の行を消去すると:
WinJS.Utilities.query("a").listen("click", this.linkClickEventHandler, false);
私のjsスクリプトから、外部リンクは機能しますが、他のアプリページには履歴ボタンがありません。