我一直在制作一个使用 phonegap 使用相机的应用程序。当我通过我的设备通过 eclipse 测试应用程序时,应用程序启动并且在我的手机上一切正常。
一旦我运行 phoneGap 构建服务并下载和测试应用程序,一切都很好,除了单击捕获照片或从库中获取没有任何作用。任何想法为什么它会在构建之前工作,但不是在构建之后?
代码已删除
我一直在制作一个使用 phonegap 使用相机的应用程序。当我通过我的设备通过 eclipse 测试应用程序时,应用程序启动并且在我的手机上一切正常。
一旦我运行 phoneGap 构建服务并下载和测试应用程序,一切都很好,除了单击捕获照片或从库中获取没有任何作用。任何想法为什么它会在构建之前工作,但不是在构建之后?
代码已删除
克林特,
首先,为什么:我怀疑您看到 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 :)
原来答案很简单。我的相机函数变量在 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 中。它可以正常工作。