Javascript 在设备上测试时未定义Cordova插件

Javascript 在设备上测试时未定义Cordova插件,javascript,angularjs,cordova,phonegap-plugins,phonegap,Javascript,Angularjs,Cordova,Phonegap Plugins,Phonegap,我正在与ngCordova和AngularJS一起使用Phonegap。我正在尝试使用以下插件()来帮助我将一些媒体保存到设备中。我的问题是我的插件给了我以下错误: [phonegap][console.error]错误:未定义的不是对象(正在计算“$window.imageResizer.getImageSize”) 这只有在我检查设备上的应用程序时才会发生,当我通过localhost:3000在本地运行应用程序时,我不会得到错误。在DeviceReady调用之后运行控制台日志时,我会得到类似

我正在与ngCordova和AngularJS一起使用Phonegap。我正在尝试使用以下插件()来帮助我将一些媒体保存到设备中。我的问题是我的插件给了我以下错误:

[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>

如果有人能帮助我,请理解为什么当我在我的设备上时插件是未定义的,当它们在浏览器上运行良好时,我将非常感谢。

我看到您从画布上以PNG的形式获取数据URL,然后尝试将其存储为jpg

也许可以试试这个:

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);
        };


    });
与此相反:

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

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

这是一个非常棘手的问题,让我想一想,但我们终于找到了答案。Phonegap使用水合作用,这是一种无需每次重新安装即可更新应用程序的方法。结果表明,Phonegap 6.5.0中存在一个漏洞,这意味着cordova.js文件加载不正确。解决这个问题的办法是关闭水合作用。一旦我关掉它,插件就开始加载到设备上

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