我有下一个代码
function navigate(_hash){
alert('before');
//try#1
window.location.hash = _hash;
//try#2
// window.location.href=window.location.href.split("#")[0]+"#" +url;
alert('after');
}
navigate('someurl')
问题是在更改 url 哈希(两种变体)后,应用程序就会挂起。有趣的是,第二个警报没有触发。所以应用程序只是......一段时间后崩溃。js控制台中什么都没有。调试日志说
线程 0x*** 已退出,代码为 259 (0x103)。
谷歌对此一无所获。似乎这是一个常见的错误代码。更多细节:我正在使用 ChaplinJs,所以无法摆脱哈希导航。
第二个想法是卓别林使系统过载,我们无法到达任何地方,但是(!)将日志和警报放在 window.on('hashchange',....) 中的 lib 源中也没有做出任何努力,因为我们没有也到那里。
WP 8.0 尝试了 Cordova 4.* 和 5.* 也尝试修改 xhrXelper.cs 但它与导航本身无关。
PS:我知道 jquery mobile 建议禁用 hashchanges onmobile 导航。但我不能:(
PPS:还尝试禁用卓别林的变化
new App({routes: routes, controllerSuffix: '-controller', pushState: false,hashChange:true})
但这也没有产生任何好的结果,因为它将哈希放置到 href 以在间隔中检查它并且应用程序再次挂起。所以我认为这是一个 webview 问题
更多附加信息:应用程序的连续重新运行有时会使其工作(10 次运行可以使其工作)。这很奇怪。
模拟器和设备的行为方式相同。
更新:在某处读到在“deviceready”事件之前限制导航至关重要。但这也不是个案。
Update2:从头开始创建cordova proj。在deviceready cb中添加了哈希更改,它挂起
更新 3:8.1 上的相同代码完美运行