【问题标题】:Cordova plugins "TypeError: Cannot read property 'xxxx' of undefined"Cordova 插件“TypeError:无法读取未定义的属性‘xxxx’”
【发布时间】:2016-03-13 02:36:05
【问题描述】:

科尔多瓦 6.0:

window.cordova.plugins.activity.getExtras 被调用时,我得到了错误

TypeError:无法读取未定义的属性“活动”。

如何解决?以下代码是我的插件配置:

activity.js

cordova.define("com.zlzkj.cordova.activity.activity", function(require, exports, module) {
var exec = require('cordova/exec');
function Activity() {
};
Activity.prototype={
    start : function(activityClassName,jsonData,successCallback) {
    exec(successCallback, errorCallback, "ActivityPlugin", "start", [activityClassName,jsonData]);
    },
    getExtras : function(successCallback) {
    exec(successCallback, errorCallback, "ActivityPlugin", "getExtras", []);
    }
};
var errorCallback = function(message) {
    alert("Error:" + message);
};
module.exports = new Activity();
});

config.xml

<feature name="ActivityPlugin">
        <param name="android-package" value="com.zlzkj.cordova.ActivityPlugin" />
</feature>

cordova_plugins.js

module.exports = [
    {
        "file": "plugins/cordova-plugin-whitelist/whitelist.js",
        "id": "cordova-plugin-whitelist.whitelist",
        "runs": true
    },
    {
        "file": "plugins/com.zlzkj.cordova.activity/www/activity.js",
        "id": "com.zlzkj.cordova.activity.activity",
        "clobbers": [
            "cordova.plugins.activity"
        ]
    }
];

window.cordova.plugins.activity.getExtraswindow.cordova.plugins.activity.start 的调用方式如下:

    .controller('AppCtrl', function($scope, $ionicModal, $ionicPopover, $timeout,  $location) {
        // Form data for the login modal
        var loginData = $scope.loginData = {
            userName:"",
            privName:"",
            funcIdStr:""
        };
//'window.cordova.plugins.activity.getExtras' make error messages
    window.cordova.plugins.activity.getExtras(function(data){     
                                    loginData.userName=date.userName;
                                    loginData.privName=data.privName;
                                    loginData.funcIdStr=data.funcIdStr;
                                    $scope.$apply();
                                });

    }

    .controller('HomeCtrl', function($scope, $stateParams) {

        var activityDate = $scope.activityDate = {
            flag:false,
            name:""
        }

        $scope.goActivity = function(){
            var sendData = {
              id:10001,
              name:"Simon",
              age:28
            };
//'window.cordova.plugins.activity.start' is called correctly          
    window.cordova.plugins.activity.start("com.haiwei.ar_oaapp.activity.AdditionActivity",sendData,function(data){
                $scope.activityDate.flag=true;
                activityDate.name=data.name;
                $scope.$apply();
            });


        }

    })

app.js中的部分代码

.run(function($ionicPlatform) {
    $ionicPlatform.ready(function() {
        // Hide the accessory bar by default (remove this to show the accessory bar above the keyboard
        // for form inputs)
        if (window.cordova && window.cordova.plugins.Keyboard) {
            cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
        }
        if (window.StatusBar) {
            // org.apache.cordova.statusbar required
            StatusBar.styleDefault();
        }
    });
}

【问题讨论】:

  • cordova ready 事件已经触发了吗?
  • 嗨,@ChristianKuetbach,感谢您的快速回复。如何触发就绪事件?我也使用 AngluarJs。在controllers.js中可以正确调用“window.cordova.plugins.activity.start”方法。

标签: cordova cordova-plugins


【解决方案1】:

Cordova 将触发该事件。你应该听听这个事件。在事件触发之前没有可用的插件。

【讨论】:

    猜你喜欢
    • 2016-04-12
    • 1970-01-01
    • 2020-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-18
    • 2021-03-12
    相关资源
    最近更新 更多