我有一个适用于 Android 的 cordova + jquerymobile 应用程序,其中包含一个本地插件列表。 一切都很好,直到我使用“cordova platform update adnroid”命令将 cordova 从 3.3.0 更新到 3.6.4。 在此更新之后,cordova 不会在某些设备上触发 deviceready 事件。
我已经就类似问题对 stackoverflow 进行了研究,但没有找到任何可以帮助我的东西。
有什么想法吗? txh 提前寻求帮助
最佳答案
当您查看日志时,您可能会看到如下内容:
D/CordovaLog( 3770): file:///android_asset/www/cordova.js: Line 512 : Uncaught TypeError: Cannot set property connection of #<a Navigator> which has only a getter
没有捕获到异常,所以这就是故事的结尾。 修复非常简单,并已提交到下一个版本。
我手动应用了 diff,它似乎有效。我能够向一位受影响的用户确认该应用程序现在可以正常运行。
diff --git a/src/common/builder.js b/src/common/builder.js
index 826820d..75d3ea7 100644
--- a/src/common/builder.js
+++ b/src/common/builder.js
@@ -31,9 +31,14 @@ function each(objects, func, context) {
function clobber(obj, key, value) {
exports.replaceHookForTesting(obj, key);
- obj[key] = value;
+ var needsProperty = false;
+ try {
+ obj[key] = value;
+ } catch (e) {
+ needsProperty = true;
+ }
// Getters can only be overridden by getters.
- if (obj[key] !== value) {
+ if (needsProperty || obj[key] !== value) {
utils.defineGetter(obj, key, function() {
return value;
});
有关详细信息,请参阅这两个链接,其中提供了所有详细信息。基本上,为 iOS8 支持添加了一些代码,它对某些版本的 android 有不好的副作用。
关于javascript - 从 3.3.0 更新到 3.6.4 后,Cordova 未启动 deviceready,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28243067/