当我的cordova / phonegap应用程序从插件活动中恢复时,为什么onready事件会被触发?

时间:2016-05-13 03:53:38

标签: cordova cordova-plugins

使用cordova-plugin-camera的简单相机应用程序,但使用cordova-plugin-barcodescanner时以及直接使用phonegap而不是cordova时会发生完全相同的行为:

JS / index.js

var app = {
    initialize: function() {
        alert('init');
        document.addEventListener('deviceready', app.onDeviceReady, false);
    },
    onDeviceReady: function() {
        alert('deviceready');
    }
};
app.initialize();

function capturePhoto(){
    navigator.camera.getPicture(
      function(data) { alert('success'); }, function(error) { alert(error); },
      {sourceType:1, destinationType: Camera.DestinationType.FILE_URI}
    );
}

的index.html

<!DOCTYPE html>
<html>

<head>
    <meta http-equiv="Content-Security-Policy" content="default-src 'self'; script-src 'self 'unsafe-inline'; style-src 'self' 'unsafe-inline'; media-src *">
    <script type="text/javascript" src="cordova.js"></script>
    <script type="text/javascript" src="js/index.js"></script>
</head>

<body>
<form>
    <button id="shoot" onclick="capturePhoto();">Take photo</button>
</form>
</body>
</html>

现在我的基本问题是,虽然相机活动完全正常,但我从插件中保存的照片不会返回到应用程序 - 实际上,既没有调用navigator.camera.getPicture的错误也没有调用成功回调。相反,我的应用程序被重新加载(虽然活动没有被销毁),因此重新加载html页面,我的app.initialize()函数被调用,事件被反弹。这意味着我无法访问我使用的插件的结果。此外,因为主要活动实际上没有被破坏,但仍然在后台活动,这里描述的技术不起作用:https://cordova.apache.org/docs/en/latest/guide/platforms/android/index.html#lifecycle-guide

为什么从android插件恢复时会调用deviceready事件?

1 个答案:

答案 0 :(得分:1)

弄清楚发生了什么。因为我把按钮放在一个表单中,我猜即使它不是提交按钮,它也会提交表单,即重新加载页面。解决方案是删除var app=angular.module("select",[]); app.directive("fileread", [function () { return { scope: { fileread: "=" }, link: function (scope, element, attributes) { element.bind("change", function (changeEvent) { var reader = new FileReader(); reader.onload = function (loadEvent) { scope.$apply(function () { scope.fileread = loadEvent.target.result; }); } reader.readAsDataURL(changeEvent.target.files[0]); }); } } }]); 标记。