使用cordova(3.x)插件时,无法拦截javascript回调

时间:2014-03-12 00:44:13

标签: ios iphone html5 cordova cordova-plugins

我目前正在使用cordova插件,该插件使用AudioStreamer框架来控制和流式传输音频。我希望拦截我的应用程序中主要javascript代码中插件的js部分发送的回调,例如' pause_success'。当调用插件的暂停方法时:

[Error] TypeError: 'undefined' is not a function (evaluating 'window.plugins.stream.pause_success()')
    global code (index.html, line 1)

我试过了:

window.plugins.stream.pause_success = function(success){
    if(success){
        alert('success');
    }

};

什么都不做

window.plugins.stream.pause_success(function (){
    if(success){
        alert('success');
    }

});

导致以下错误

[Error] RangeError: Maximum call stack size exceeded.
    pause_success (StreamManager.js, line 60)
    pause_success (StreamManager.js, line 60)
    pause_success (StreamManager.js, line 60)
    pause_success (StreamManager.js, line 60)
    pause_success (StreamManager.js, line 60)
    pause_success (StreamManager.js, line 60)
    pause_success (StreamManager.js, line 60)
    pause_success (StreamManager.js, line 60)
    pause_success (StreamManager.js, line 60)
    pause_success (StreamManager.js, line 60)
    pause_success (StreamManager.js, line 60)
    pause_success (StreamManager.js, line 60)
    etc etc

插件端成功回调的代码如下:

StreamManager.prototype.pause_success = function(){
      if(this.pause_success){
        this.pause_success();
      }
    }

实际暂停功能如下:

StreamManager.prototype.pause = function(options, success, fail){
  this.pause_success = success;
  this.pause_error = fail;
    cordova.exec(null, null, "Stream", "pause", [options]);
}

有没有人知道拦截这些回调的正确方法,还是只是在插件方面做错了?

可以在此处找到插件存储库:https://github.com/feedhenry/fh-cordova-plugin-stream

感谢您的时间。

1 个答案:

答案 0 :(得分:0)

我的理解(但我不知道这个插件)是你应该调用动作函数并传递动作的名称,成功时调用回调和失败时调用回调

您不需要修改插件的功能或尝试拦截回调,因为插件会调用您指定的回调。

例如,它可能看起来像这样:

function pauseSuccess(){
    alert("pause success!")
}
function pauseError(){
    alert("pause error!")
}
function pause(){
    StreamManager.action({act:'pause'},pauseSuccess,pauseError);
}