我在Windows 8应用程序上工作,并且从我使用链接hystory通过应用程序来回运行的页面,我还有3或4个指向外部网站的链接(例如:facebook或我的网站)。我试图在iframe中运行它们,或者也可以在默认浏览器中打开它们,就像简单的链接一样。这两种方法都导致base.js出错,说它无法处理我的错误(!?)我在问这里之前搜索了很多。我看了msdn样本工作正常,但如果我在我的应用程序中复制我需要的结果导致相同的错误。我从另一个我没有前进历史的页面使用它,它可以工作,但我真的需要它在头版。任何想法?非常感谢你。
LE:
这是我的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脚本中,外部链接有效,但我的其他应用页面中没有任何历史记录按钮。
答案 0 :(得分:2)
您正尝试使用导航框架导航到外部URI。它通常用于在应用程序的本地上下文和可以包含“片段”的页面中加载到主导航控件中。
我不会在您的函数调用中挂钩锚标签,而是在您的linkClickEventHandler中我会执行以下操作以仅挂钩您的内部链接
WinJS.Utilities.query(".nav").listen("click", linkClickEventHandler, false);
反过来你的内部链接将是
<a href="http://www.bing.com" class="nav">click me</a>
此方法仅将导航框架挂钩到您的内部链接。另一种方法是检查处理程序中的'this.href',如果它包含http://或https://则调用window.open