2017-04-21 25 views
3

我使用的是ngCordova和AngularJS的Phonegap。我正尝试使用以下插件(PhoneGap-Image-Resizer)来帮助我将一些媒体保存到设备。我的问题是,我的插件是给我下面的错误:Cordova插件在设备上测试时未定义

[PhoneGap的] [console.error]错误:未定义是不是(评估“$ window.imageResizer.getImageSize”)

这只发生对象当我检查我的设备上的应用程序,当我通过localhost:3000本地运行它时,我不会收到错误。在DeviceReady调用之后运行控制台日志时,我会得到类似的结果。在浏览器中,它是好的,在设备上它未定义的地方。

了大量的研究后,我已经看到了一些检查cordova.js文件在我的index.html,正如你可以看到下面是被引用:

的Index.html

<!DOCTYPE html> 
<html> 

<head> 
    <meta charset="utf-8" /> 
    <meta name="format-detection" content="telephone=no" /> 
    <meta name="msapplication-tap-highlight" content="no" /> 
    <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width" /> 
    <link rel="stylesheet" type="text/css" href="css/app.css" /> 
</head> 

<body class="app-container"> 
    <div class="app"> 
     <div ng-app="MyApp" class="ui-view-container"> 
     <ui-view class="main-view"> 
     <img src="/img/logo.png" alt="my App" class="loading-logo"/> 
     </ui-view> 
     </div> 
    </div> 

    <script type="text/javascript" src="js/angular.min.js"></script> 
    <script type="text/javascript" src="js/angular-route.js"></script> 
    <script type="text/javascript" src="js/angular-touch.js"></script> 
    <script type="text/javascript" src="js/angular-animate.min.js"></script> 
    <script type="text/javascript" src="js/angular-ui-router.min.js"></script> 
    <script type="text/javascript" src="js/angular-foundation.js"></script> 
    <script type="text/javascript" src="js/angular-modules/app.js"></script> 
    <script type="text/javascript" src="js/angular-modules/controllers/main.js"></script> 
    <script type="text/javascript" src="js/ng-cordova.js"></script> 
    <script type="text/javascript" src="cordova.js"></script> 
    <script type="text/javascript" src="js/index.js"></script> 
    <script type="text/javascript"> 
     app.initialize(); 
    </script> 
</body> 

</html> 

这里是我的部分

<div class="row collapse expanded text-center camera"> 
    <div class="row"> 
     <div class="small-12 columns end"> 
      <canvas id="canvas" height="250" width="375"></canvas> 
     </div> 
    </div> 

    <div class="row"> 

    <div class="small-12 columns"> 
    <h2>Image of canvas</h2> 
      <img id="CanvasImage" alt="text" /> 
     </div> 
    </div> 

    <div class="row"> 
     <div class="small-6 columns"> 
      <a class="button expanded" ng-click="camera()">Camera</a> 
     </div> 
     <div class="small-6 columns"> 
      <a class="button expanded" ng-click="savecanvas()">savecanvas</a> 
     </div> 
    </div> 
</div> 

这里是我的控制器

angular.module('MyApp') 
    .controller('CameraCtrl', function($scope, $cordovaCamera, $rootScope, $location, $window, starFactory) { 

     $scope.savecanvas = function() { 
      document.addEventListener("deviceready", function() { 
       var theCanvas = document.getElementById('canvas'); 
       var CanvasImage = document.getElementById('CanvasImage'); 
       CanvasImage.src = theCanvas.toDataURL("image/png"); 

       $window.imageResizer.storeImage(
        function(data) { console.log('It worked!');}, 
        function (error) {console.log("Error : \r\n" + error);}, 
        theCanvas.toDataURL("image/png"), 
        {imageDataType: ImageResizer.IMAGE_DATA_TYPE_BASE64,format: ImageResizer.FORMAT_JPG} 
       ); 

      }, false); 
     }; 


    }); 

如果任何人都可以请帮助我,理解为什么当我在我的设备上插件是不确定的,当他们在浏览器上工作良好时,我将非常感激。

回答

0

这是一个非常棘手的问题,但我们终于得到了答案。 Phonegap使用Hydration,这是一种更新应用程序的方式,无需每次重新安装。结果发现在Phonegap 6.5.0中有一个水合错误,这意味着cordova.js文件加载不正确。要解决此问题,请关闭水合作用。一旦我把它关闭,插件开始加载在设备上。

0

我看到你从画布获取数据URL作为PNG,但然后尝试将其存储为JPG格式?

也许试试这个:

theCanvas.toDataURL("image/jpeg", 1); 

取而代之的是:

theCanvas.toDataURL("image/png"); 
0

我研究过的Git的枢纽插件。在Android怪癖和howto的部分中,提到storeImage函数将始终将映像存储到设备的默认外部存储器下,在给定的目录和文件名下。 photoAlbum属性将被忽略。如果是这种情况,我认为您需要在移动设备中安装外部存储卡。