0

我一直在制作一个使用 phonegap 使用相机的应用程序。当我通过我的设备通过 eclipse 测试应用程序时,应用程序启动并且在我的手机上一切正常。

一旦我运行 phoneGap 构建服务并下载和测试应用程序,一切都很好,除了单击捕获照片或从库中获取没有任何作用。任何想法为什么它会在构建之前工作,但不是在构建之后?

代码已删除

4

2 回答 2

2

克林特,

首先,为什么:我怀疑您看到 Phonegap 的实际构建包与 Eclipse 的结果之间存在差异的原因是您的本地构建会“更慢”(由于包中的调试信息,或者额外的重量) android 设备,因为来自 eclipse 的 adb 进程...等),因此在 JS 线程尝试通过 jQuery 寻找这些元素之前,这给了 DOM 时间来完成。

正如您所制定的那样,处理此问题的“正确方法”是将您的外部 var 定义保留在它们所在的位置......

// buttons for capturing and browsing for photo and uploading
        var capture_btn;   //     = $('#capture');     \
        var getImg_btn;    //     = $('#getImg');       >  do these later.
        var uploadImg_btn; //     = $('#uploadImg');   /

进而...

function onDeviceReady() {
    // now allocate DOM to buttons
        capture_btn    = $('#capture');    //
        getImg_btn     = $('#getImg');     // 'var'less, to keep in global scope
        uploadImg_btn  = $('#uploadImg');  //
    // rest of deviceReady as already written

你显然“让它工作了”(耶!)但希望这能解释(更详细一点)为什么你在实时 APK 和本地调试构建之间看到不同的结果,这个更完整的答案将在未来帮助其他人......: )

-TTFN 和快乐的黑客,

DX :)

于 2012-11-15T10:27:03.413 回答
1

原来答案很简单。我的相机函数变量在 DOM 加载它们之前被调用。

// buttons for capturing and browsing for photo and uploading
        var capture_btn    = $('#capture');
        var getImg_btn     = $('#getImg');
        var uploadImg_btn  = $('#uploadImg');

所以它甚至从未注册过点击。奇怪的是它在通过 Eclipse 进行测试时起作用。

我将所有相机控件添加到 deviceready 事件和 viola 中。它可以正常工作。

于 2012-11-14T16:43:40.970 回答