【发布时间】: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.getExtras 和 window.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”方法。