【问题标题】:PhoneGap application not .live('tap') events on iOSiOS 上的 PhoneGap 应用程序不是 .live('tap') 事件
【发布时间】:2011-06-15 01:24:48
【问题描述】:

我有一个使用 jquery、jquerymobile 和 spin.js 的应用程序在 phonegap (0.9.5.1) 上运行,并且在让它在 iOS 上正常工作时遇到了一些问题。

点击 div 时应用程序应该会启动相机。在我的控制器中,我拥有它,以便它执行类似于以下操作:

myController = Spine.Controller.create({
    events: {"tap .take-picture": "takePic"},

    takePic: function(){
        var self = this;
        navigator.camera.getPicture(function(data){
            self.doStuffWith(data);
        }, 
        null,
        {quality: 50, destinationType: Camera.DestinationType.DATA_URL, sourceType: Camera.PictureSourceType.CAMERA})
    },

    doStuffWith: function(data){
        // Doing stuff with said data
    }
});

真正让我困惑的是,这段代码在 Android 上可以正常工作。是否有某种 iOS 怪癖导致无法正确发送点击事件?

【问题讨论】:

  • 如果您将事件更改为单击,它会正确触发吗?你在等待 dom/设备准备好了吗?
  • 是的。我还尝试为触摸和单击事件添加侦听器,看看是否会发生这种情况。我还确保设置了“设备就绪”侦听器,因此我知道 phonegap 已正确加载。
  • 是没有触发事件,还是takePic函数失败?
  • 未触发事件以启动相机,而在 Android 上相机启动的位置(如预期的那样)。

标签: javascript jquery ios cordova jquery-mobile


【解决方案1】:

我认为您正在尝试在 iPhone 应用程序中使用 Android phonegap js。您需要确保为您正在开发的平台包含正确的phonegap.js。尽管它们具有相同的名称,但每个版本的 phonegap 都是针对其主机操作系统量身定制的。

【讨论】:

    【解决方案2】:

    这可能是几件事:

    1. 您正在 iOS 模拟器中对此进行测试。模拟器中没有相机,您没有指定失败回调,但是 API 中有一个错误(我相信),如果源类型不可用,它不会调用失败回调。您应该会在运行日志 (Cmd-Shift-R) 中看到这一点(“源类型不可用”)。

    2. 在设备上,我单独测试了您的代码,并在 deviceReady() 中运行它,它运行 - 所以 API 调用似乎是正确的。我在按钮上添加了一个触摸处理程序来调用代码,所以看起来点击事件正在工作。因此,基于这些测试(在设备上):

    (a) API 调用有效

    (b) 点击事件起作用

    这使我得出结论,该错误不在这两种可能性范围内。

    【讨论】:

    • iOS 设备和 Android 设备有什么区别,导致完全相同的代码在 Android 设备上运行,但在 iOS 上不运行?我正在真实硬件(iPod Touch 第 4 代)上进行测试,但仍然一无所获。
    • 在后端,它的不同代码,甚至是javascript(现在),它具有相同的接口,但需要自己的phonegap.js(不同的实现)。也许你在重用 Android js?
    • 哦!我原以为 javascript 代码库是完全相同的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多