Cordova:无法调用未定义的方法“exec”

Posted

技术标签:

【中文标题】Cordova:无法调用未定义的方法“exec”【英文标题】:Cordova: Cannot call method 'exec' of undefined 【发布时间】:2013-07-25 07:32:15 【问题描述】:

我正在使用带有 Cordova/Phonegap 的 Facebook Connect 插件,此处已解释 (https://github.com/phonegap-build/FacebookConnect)。我已经包含了我的 Facebook SDk js 文件,还包含了 FB Cordova js 文件,我没有包含 Cordova.js 文件本身,因为当我调用登录时它似乎已包含在 Ripple Emulator(使用 Ripple 测试)中Facebook JS 文件中的方法我在 try-catch 块中得到异常:'Cannot call method 'exec' of undefined'

这是我的代码的快照

document.addEventListener('deviceready', function() 
                                  try 
                                  alert('Device is ready! Make sure you set your app_id below this alert.');
                                  FB.init( appId: "appid", nativeInterface: CDV.FB, useCachedDialogs: false );
                                  document.getElementById('data').innerhtml = "";
                                   catch (e) 
                                  alert(e);
                                  
                                  , false);

从 Chrome 开发工具中,我在被调用函数的调用堆栈 [native code] 中看到这可能是原因,这是否意味着我必须在设备上进行测试?

任何建议都将不胜感激。

【问题讨论】:

【参考方案1】:

当您使用 Ripple 模拟器测试页面时,您应该包含 cordova.js 文件。 Ripple 模拟器仅模拟移动环境,您仍然需要定义 Cordova 对象的 cordova.js 文件。

Phonegap 插件使用 Cordova.execjavascript 调用本机方法。您的 Facebook 插件也将使用该方法进行本地方法调用。还要确保在页面中的 facebook 插件 js 文件之前包含“cordova.js”。

【讨论】:

Cordova 调用本机方法,这就是我在 Ripple 模拟器中收到此错误的原因吗,这是否意味着 Ripple 无法使用本机方法 我不这么认为。本地调用都是由 Ripple 模拟的。插件 js 必须调用 'Cordova' 对象的 exec 方法。但是如果在此之前没有包含cordova.js,'Cordova'将是未定义的,所以你会得到'Cannot call method 'exec' of undefined。 你说得对,在 Ripple 中使用正确版本 (2.0.0) 修复了问题的 cordova/phonegap 环境似乎存在不兼容问题

以上是关于Cordova:无法调用未定义的方法“exec”的主要内容,如果未能解决你的问题,请参考以下文章

Cordova 无法使用 --target 读取未定义的属性“名称”

无法安装“cordova-plugin-firebase-authentication”:未定义

PhoneGap 错误 - “未捕获的 ReferenceError:cordova 未定义”

未调用 Cordova 插件回调 (iOS)

插件未定义(cordova-plugin-googlemaps)

“调用未定义函数 odbc_exec()”错误连接到 Linux PHP 服务器上的 Access 数据库