我正在使用 Phonegap 为 iOS 构建一个应用程序,但遇到了一些问题。该应用程序在模拟器和真实设备上运行良好,直到我使用多任务关闭(双击主页按钮序列..)关闭应用程序
重新打开应用程序后,我发现它变得无响应,您无法以任何方式与之交互。我花了相当多的时间尝试调试它,但我并不高兴。
错误明智我一直得到错误Failed to load webpage with error: CDVWebViewDelegate: Navigation started when state=1
出现在 xcode 控制台中。经过大量的谷歌搜索后,这似乎是由于 URL 中的哈希标签引起的(我用来向下滚动到相同和不同页面上的链接的东西)。大多数建议建议将 phonegap/cordova 更新到最新版本。我以前在 2.8 上,后来升级到 2.9,但它仍然不起作用,我现在在 3 上,我仍然遇到同样的问题。
我已经检查了 cordova git 并用假定的修复更新了我的 CDVWebViewDelegate.m 文件几次,似乎没有任何效果。我有一个以前版本的应用程序在早期版本的 Cordova/Phonegap 上工作,但我最近升级了,我不想降级让它工作..
我可能应该注意到我使用 zepto 进行我的 ajax 调用而不是 JQM,我使用以下代码滚动哈希标签(认为这可能会有所帮助,因为它似乎是一个哈希问题..)
哈希变化函数
// Ajax
var wrap = $('#contentScroller .scroller')
// get href
$('a.ajax').click(function () {
location.hash = $(this).attr('href').match(/(^.*)\./)[1]
return false
})
// load page
function hashChange() {
var page = location.hash.slice(1)
if (page != "" && window.location.hash) {
wrap.hide();
spinner.spin(target);
//setTimeout(function () {
wrap.load('pages/' + page + ".html .page-wrapper")
contentScroller.scrollTo(0,0);
refreshScroll();
//}, 1500);
snapper.close();
$(menuBtn).removeClass('active');
}else{
wrap.hide();
spinner.spin(target);
//setTimeout(function () {
wrap.load('pages/Welcome.html .page-wrapper')
refreshScroll();
//}, 1500);
snapper.close();
$(menuBtn).removeClass('active');
}
}
// check for hash change
if ("onhashchange" in window) {
$(window).on('hashchange', hashChange).trigger('hashchange')
} else { // lame browser
var lastHash = ''
setInterval(function () {
if (lastHash != location.hash)
hashChange()
lastHash = location.hash
contentScroller.scrollTo(0,0);
}, 100)
}
滚动
$(document)
.on('ajaxStart', function () {
wrap.hide();
})
.on('ajaxStop', function () {
//wrap.show();
})
.on('ajaxSuccess', function () {
//setTimeout(function () {
spinner.stop();
wrap.fadeIn(700);
refreshScroll();
//}, 1000);
// Local storage scrollTo
var storage = window.localStorage;
var url = window.location.href.substr(window.location.href.lastIndexOf("/") + 1);
$('a.scroll-link').click(function (event) {
event.preventDefault();
url = url.replace('home.html?firstrun#', "");
url = url.replace(url, url+".html");
var myHref = $(this).attr('href');
if (url == myHref) {
var sameScroll = $(this).attr('data-scroll-same-page');
sameScroll = sameScroll.replace(sameScroll, "a#" + sameScroll);
contentScroller.scrollToElement(sameScroll, 1500);
} else {
var diffScroll = $(this).attr("data-scroll-diff-page");
storage.setItem("key", diffScroll);
//Alter value for iScroll
var value = window.localStorage.getItem("key");
value = value.replace(value, "a#" + value);
location.hash = $(this).attr('href').match(/(^.*)\./)[1]
$(window).on('hashchange', hashChange).trigger('hashchange')
// Scroll to element after .5 second
setTimeout(function () {
contentScroller.scrollToElement(value, 1500);
return false;
}, 2000)
// Clear local storage to prevent scrolling on page reload
localStorage.clear();
}
示例链接
<a href="IndexOfTerms.html" class="ajax scroll-link" data-scroll-diff-page="First_year_allowance">
然后这会将 attr "first_year_allowance" 传递到 IndexOfTerms 页面,然后向下滚动到具有该 id 的元素
任何人都可以阐明我如何解决这个问题吗?它真的开始让我烦恼,所以我很想得到一个相当尖锐的修复!
注意:使用的库:iScroll、Zepto、fastclick、snapjs、spinjs
谢谢!