【问题标题】:Back button with phonegap (and query mobile?)带有 phonegap 的后退按钮(和查询手机?)
【发布时间】:2011-09-08 07:44:00
【问题描述】:

我在使用 jquery mobile 和 phonegap 编写的应用程序时遇到问题。在浏览器中进行测试时,我使用后退按钮没有问题(不涉及 phonegap js)。但是,一旦我尝试使用带有 phonegap js 的设备,它就会中断。

重现步骤:

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

在浏览器(chromium、firefox 等)上,它会返回一个“页面”(无论它是前一个 # 链接)。这是首选行为。

在设备(iPhone 4、iPhone 模拟器、Android 2.2(设备)、Android 3.2(设备))上,它转到第一个/登陆页面(index.html 文件中的第一个“页面”)。

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

【问题讨论】:

    标签: javascript jquery jquery-mobile cordova


    【解决方案1】:

    你使用 jQuery Mobile 的"Back" button link 属性吗?我已经轻轻地使用了它并且它可以工作(到目前为止仅在 Android 上使用)。您是否试图覆盖(仅限 Android)backbutton event?不推荐,因为你想要什么,无论如何在 iPhone 等上都不可能。

    【讨论】:

    • 我在一些地方使用了<li><a href="back" href="#somepage">Back</a></li>(某些页面不是它返回的页面)。它在浏览器中运行良好,但在 phonegap 中不行。我还在几个地方调用了 history.back()。它在网络浏览器中运行良好,但在 phonegap 中却不行。
    • 我评论中的第一个href应该是data-rel="back"。很抱歉造成混乱。
    • 嗯。好吧,您使用的 jQuery Mobile 版本可能是相关的 - 历史和导航曾经有过问题。
    • 我使用的是最新版的jquery和jquery mobile。另外,我仍然怀疑问题出在其他地方,因为浏览器中不存在问题,只是在 phonegap 中。
    【解决方案2】:

    问题是由我使用的数据 url 中的空格引起的。桌面浏览器似乎可以正确处理空格,但是移动浏览器将空格转换为%20% 字符。 jQuery mobile 尝试使用空格,但浏览器只记住更改后的字符。

    编辑: 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");
    

    我遇到的问题是带有数据 URL page two 的页面。在桌面浏览器上,空间得到了维护,jqm 中内置的自定义历史控件继续按预期运行。但是在移动浏览器上,空间变成了转义空间,jqm 历史控件无法识别或跟踪。

    【讨论】:

    • 我也有同样的问题。你能更详细地解释一下你的意思吗?我没有空格...什么数据网址?在这种情况下,我认为我不使用一个。
    • @SpiRail 我在一周或两周前更新了问题 - 我不记得更新问题是否会向评论过它的人发送通知。无论如何,我编辑的问题是否为您提供了足够的额外信息?
    • 嗨,对不起,我没有回复你。我不再使用后退按钮了。也许如果我再次需要它,我会在这里看看。
    【解决方案3】:
    <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

    【讨论】:

    • 这看起来几乎是直接从文档中复制/粘贴出来的,这实际上不适用于 jQuery Mobile。它也无助于解决实际问题。
    猜你喜欢
    • 1970-01-01
    • 2015-05-26
    • 2012-04-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多