在cordova.exec上为插件添加函数到Ripple模拟器失败

时间:2014-12-24 15:51:28

标签: cordova cordova-plugins ripple

我们正在开发一款带有Cordova的移动应用程序,其中包含许多插件,并通过Ripple模拟器在Chrome中进行检查。显然,有些插件使用的是Ripple未实现的本机功能,这会破坏Chrome中的部分应用功能。

问题:如何将模拟器功能添加到Ripple?以下是我到目前为止所发现的以及使其工作所缺少的内容。

在控制台中可以看到如下错误:

missing exec:Keyboard.close
ripple.js:40 TypeError: Cannot read property 'close' of undefined
    at ripple.define.module.exports.exec (http://localhost:4428/ripple/assets/ripple.js:40:28665)
    at Function.Keyboard.close (http://localhost:4428/plugins/com.ionic.keyboard/www/keyboard.js:14:2)
    ...

keyboard.js

exec = require('cordova/exec');
// Line 14, where from the exception stacktrace
exec(null, null, "Keyboard", "close", []);

通过一些谷歌搜索,很清楚cordova.exec是Javascript部分和本地后端之间的连接器。我假设,Ripple应该取而代之,而且确实有bridge.js可能正是这样做的。它甚至还有函数add(),显然是用户提供的模拟器。所以我说,在我的代码中,我应该写一些类似的东西:

var bridge = ripple('platform/cordova/2.0.0/bridge'); 
bridge.add( 
    "Keyboard", 
    { close: function () {} } 
);

唉,ripple在应用范围内未定义。这是缺失的部分 - 如何访问ripple

2 个答案:

答案 0 :(得分:1)

我也遇到了这个问题以及我能想到的所有问题 - 如下所示更改插件的www部分:

var exec    = require('cordova/exec');

// --> here is the start of my code

if (exec.toString().indexOf("emulator") > 0) {
    exec = emulation;
}

function emulation(success, fail, service, action, args) {
    if (action === "add") {
        var options = args[0];
        alert("Local Notification added: " + options.message);
    }
}

// --> the end of my code

你能说些什么?

可能有人说如何避免这个伎俩。 ))

答案 1 :(得分:1)

以下是我的完整解决方案:http://www.badpenguin.org/ionic-keyboard-ripple-emulator

使用 window.parent.ripple

close()还不够;你需要模拟 init()和其他功能。