2011-09-08 53 views
3

我遇到了一个应用程序的问题,我正在写jQuery手机和手机。在浏览器中测试时,使用后退按钮没有问题(没有涉及手机js)。然而,一旦我尝试使用手机js的设备,它会中断。后退按钮与phonegap(和查询手机?)

重现步骤:

  1. 负载应用
  2. 访问多个页面(链接内部使用#)
  3. 单击后退按钮或拨打history.back()从任何地方(使用JS控制台,或通过触发某些东西来调用它)

在浏览器(铬,firefox等)上,它返回一个'页面'(前一个#链接,无论它是什么)。这是首选的行为。在设备上(iPhone 4,iPhone模拟器,Android 2.2(设备),Android 3.2(设备)),它会转到第一个/着陆页(index.html文件中的第一个'页面')。

我怀疑问题出在手机上。有没有办法恢复到首选行为或浏览器?

回答

0

该问题是由于我使用的数据url中的空间造成的。看起来桌面浏览器可以正确处理空间,但移动浏览器会将空间转换为%20%字符。 jQuery手机试图使用空格,但浏览器只记得修改过的字符。

编辑: jqm页面有一个data-url属性,允许您在一个html文档中存储多个页面。

<html> 
<head> ... </head> 
<body> 
<div data-role="page" data-url="page-one"> ... </div> 
<div data-role="page" data-url="page two"> ... </div> 
</body> 
</html> 

第一页可以在几个方面加载...

在文档

<a href="#page-one"> 

或通过JavaScript

$.mobile.changePage("#page-one"); 

我的问题是与带有数据网址page two的页面。在桌面浏览器上保留了空间,内置于jqm中的自定义历史控件继续按预期运行。但在移动浏览器上,这个空间变成了一个逃离的空间,jqm的历史控制器没有识别或追踪这个空间。

+0

我有同样的问题。你能更详细地解释一下你的意思吗?我没有空格...什么数据网址?我不认为在这种情况下使用一个。 – SpiRail

+0

@SpiRail我在一周或两周前更新了问题 - 我不记得更新问题是否向通知过的人发送了通知。无论如何,我编辑的问题是否能为您提供足够的额外信息? – CoatedMoose

+0

嗨,对不起,我从来没有回到你身边。我不再使用后退按钮。也许如果我再次需要它,请看看这里。 – SpiRail

0

你使用jQuery Mobile的"Back" button link属性吗?我已经轻松使用它,它的工作原理(迄今为止仅用于Android)。您是否尝试覆盖(仅限Android)backbutton event?不建议,为了你想要的,不可能在iPhone等等。

+0

我用'

  • Back
  • '在少数地方(SomePage的是_not_它可以追溯到页面)。它在浏览器中正常工作,但不在手机中。我也在几个地方叫history.back()。它可以在网页浏览器中正常工作,但不会出现在手机中。 – CoatedMoose

    +0

    我的评论中的第一个href应该是'data-rel =“back”'。对困惑感到抱歉。 – CoatedMoose

    +0

    嗯。那么,你使用的jQuery Mobile的版本可能是相关的 - 历史和导航一次是有问题的。 – Libby

    -2
    <script type="text/javascript" charset="utf-8" src="cordova-2.0.0.js"></script> 
    <script type="text/javascript" charset="utf-8"> 
    
    // Call onDeviceReady when Cordova is loaded. 
    // 
    // At this point, the document has loaded but cordova-2.0.0.js has not. 
    // When Cordova is loaded and talking with the native device, 
    // it will call the event `deviceready`. 
    // 
    function onLoad() { 
        document.addEventListener("deviceready", onDeviceReady, false); 
    } 
    
    // Cordova is loaded and it is now safe to call Cordova methods 
    // 
    function onDeviceReady() { 
        // Register the event listener 
        document.addEventListener("backbutton", onBackKeyDown, false); 
    } 
    
    // Handle the back button 
    // 
    function onBackKeyDown() { 
    } 
    

    确保在androidmenifest.xml文件必须包含Android版本:targetSdkVersion比Android更大:的minSdkVersion

    +0

    这看起来是一个近似直接复制/粘贴出来的文档,它并不适用于jQuery Mobile。它也没有解决实际问题。 – CoatedMoose