对于Windows 8的开发相当新,我正在开发一款具有相当扁平模型的应用程序。我看了看,但似乎无法找到如何设置WinJS页面以防止向后导航的明确答案。我已经尝试深入研究API,但它没有就此事发表任何意见。
我试图使用的代码是
WinJS.Navigation.canGoBack = false;
没有运气,它一直在抱怨只读取属性,但是,没有可以改变它的setter方法。
提前谢谢, 〜肖恩
答案 0 :(得分:7)
canGoBack
只有一个getter(在base.js
中定义),它反映了backstack的缺失或存在;即nav.history.backstack
。
按钮本身的外观由相关按钮DOM对象上的disabled属性控制,该对象又是控制可见性的CSS选择器的一部分。因此,如果您修改后退按钮的显示,请注意导航管道也是如此。
可以明确设置backstack; Navigation and Navigation History Sample有一个示例,其中包括使用beforenavigate恢复历史记录以及阻止导航,并使用以下代码:
// in ready
WinJS.Navigation.addEventListener("beforenavigate", this.beforenavigate);
//
beforenavigate: function (eventObject) {
// This function gives you a chance to veto navigation. This demonstrates that capability
if (this.shouldPreventNavigation) {
WinJS.log && WinJS.log("Navigation to " + eventObject.detail.location + " was prevented", "sample", "status");
eventObject.preventDefault();
}
},
答案 1 :(得分:3)
您无法更改canGoBack,但您可以禁用该按钮以隐藏它并释放历史堆栈。
// disabling and hiding backbutton
document.querySelector(".win-backbutton").disabled = true;
// freeing navigation stack
WinJS.Navigation.history.backStack = [];
这样可以防止倒退,仍然可以继续前进。
答案 2 :(得分:0)
所以大量的搜索和尝试禁用后退按钮的不同方法,终于找到了一个不错的解决方案。它已经从另一个stackoverflow问题改编而来。
原始算法:How to Get Element By Class in JavaScript?
我的解决方案
在片段页面的开头,正如页面定义开始声明ready:函数一样,我使用了上述算法的改编版本,并使用结果元素选择来设置disabled属性。
// Retrieve Generated Back Button
var elems = document.getElementsByTagName('*'), i;
for (i in elems)
{
if((" "+elems[i].className+" ").indexOf("win-backbutton") > -1)
{
var d = elems[i];
}
}
// Disable the back button
d.setAttribute("disabled", "disabled");
代码从页面的DOM中获取所有元素,并为生成的后退按钮过滤它。找到合适的元素后,将其分配给变量,然后我们可以设置disabled属性。
我找不到很多关于在WinJS导航应用中使用默认导航的文档,所以这里有一些失败的方法(供参考):
按类获取元素并设置|可能因为做错了而失败了,因为我对HTML和javascript没什么经验。
使用上述方法,但在for循环中设置属性会破坏应用程序并导致其冻结,原因不明。
在导航完成之前在default.js中设置属性。 | javascript调用无法识别被调用的方法或DOM元素,可能是由于页面的初始化状态。
还有其他几个,但我认为在页面加载后必须有更好的方法来检索元素。如果有人能够启发我,我将非常感激。 〜肖恩R。