【问题标题】:Can't Access Cordova plugin in Second page无法在第二页访问 Cordova 插件
【发布时间】:2014-03-27 07:18:28
【问题描述】:

我想在我的适用于 ios 的 cordova 应用程序构建中包含相机插件。所以我使用了来自互联网的样本 这是我的代码及其工作

<html>
  <head>
    <title>Capture Photo</title>
    <script type="text/javascript" charset="utf-8" src="cordova.js"></script>
    <script type="text/javascript" charset="UTF-8" src="cordova_plugins.js"></script>
    <script type="text/javascript" charset="utf-8">
    var pictureSource;
    var destinationType; 
    document.addEventListener("deviceready",onDeviceReady,false);
    function onDeviceReady() {
        pictureSource=navigator.camera.PictureSourceType;
        destinationType=navigator.camera.DestinationType;
    }
    function onPhotoDataSuccess(imageData) {
      var smallImage = document.getElementById('smallImage');
      smallImage.style.display = 'block';
      smallImage.src = "data:image/jpeg;base64," + imageData;
    }

    function onPhotoURISuccess(imageURI) {
      var largeImage = document.getElementById('largeImage');
      largeImage.style.display = 'block';
      largeImage.src = imageURI;
    }

    function capturePhoto() {
      navigator.camera.getPicture(onPhotoDataSuccess, onFail, { quality: 50,
        destinationType: destinationType.DATA_URL });
    }

    function capturePhotoEdit() {
      navigator.camera.getPicture(onPhotoDataSuccess, onFail, { quality: 20, allowEdit: true,
        destinationType: destinationType.DATA_URL });
    }
    function getPhoto(source) {
      navigator.camera.getPicture(onPhotoURISuccess, onFail, { quality: 50,
        destinationType: destinationType.FILE_URI,
        sourceType: source });
    }
    function onFail(message) {
      alert('Failed because: ' + message);
    }

    </script>
  </head>
  <body>
    <button onClick="capturePhoto();">Capture Photo</button> <br>
    <button onClick="capturePhotoEdit();">Capture Editable Photo</button> <br>
    <button onClick="getPhoto(pictureSource.PHOTOLIBRARY);">From Photo Library</button><br>
    <button onClick="getPhoto(pictureSource.SAVEDPHOTOALBUM);">From Photo Album</button><br>
    <img style="display:none;width:60px;height:60px;" id="smallImage" src="" />
    <img style="display:none;" id="largeImage" src="" />
  </body>
</html> 

但我的应用中有很多页面。所以我创建了更多的 html 页面。并提供指向此页面的 href 链接。 我从另一个页面调用了这个页面 url,但它没有成功。我已将这些 cordova.js 和脚本文件添加到我的 index.html 页面中。我仍然无法访问相机。 我怎么能解决这个问题?除了起始页面,我如何访问页面中的那些插件???

请大家帮帮我.. :) 在此先感谢

【问题讨论】:

    标签: javascript html ios cordova phonegap-plugins


    【解决方案1】:

    deviceready 事件仅在应用程序启动时触发一次。您可以安全地访问navigator.camera,而无需等待下一页的活动。事实上,您的代码会失败,因为 pictureSourcedestinationType 将是未定义的。

    <script type="text/javascript" charset="utf-8">
    var pictureSource = pictureSource=navigator.camera.PictureSourceType;
    var destinationType = navigator.camera.DestinationType; 
    
    function onPhotoDataSuccess(imageData) {
      var smallImage = document.getElementById('smallImage');
      smallImage.style.display = 'block';
      smallImage.src = "data:image/jpeg;base64," + imageData;
    }
    
    function onPhotoURISuccess(imageURI) {
      var largeImage = document.getElementById('largeImage');
      largeImage.style.display = 'block';
      largeImage.src = imageURI;
    }
    
    function capturePhoto() {
      navigator.camera.getPicture(onPhotoDataSuccess, onFail, { quality: 50,
        destinationType: destinationType.DATA_URL });
    }
    
    function capturePhotoEdit() {
      navigator.camera.getPicture(onPhotoDataSuccess, onFail, { quality: 20, allowEdit: true,
        destinationType: destinationType.DATA_URL });
    }
    function getPhoto(source) {
      navigator.camera.getPicture(onPhotoURISuccess, onFail, { quality: 50,
        destinationType: destinationType.FILE_URI,
        sourceType: source });
    }
    function onFail(message) {
      alert('Failed because: ' + message);
    }
    </script>
    

    如果您在 Android 手机上测试应用程序,ADT 捆绑包提供 logcat 用于跟踪设备上的 JavaScript 错误。

    【讨论】:

    • 我做了这些更改,但代码仍然不起作用.. :( [INFO:CONSOLE(112)] "Uncaught TypeError: Cannot read property 'DATA_URL' of undefined", source: file:/ //android_asset/www/index.html (112) 这里是新的错误。
    【解决方案2】:

    用这个替换你的相机cordova插件文件js

    var pictureSource;
    var destinationType;
    document.addEventListener("deviceready", onDeviceReady, false);
    
    function onDeviceReady() {
        pictureSource = navigator.camera.PictureSourceType;
        destinationType = navigator.camera.DestinationType;
    }
    
    function onPhotoDataSuccess(imageData) {
        var smallImage = document.getElementById('smallImage');
        smallImage.style.display = 'block';
        smallImage.src = imageData;
    }
    
    function onPhotoURISuccess(imageURI) {
        var largeImage = document.getElementById('largeImage');
        largeImage.style.display = 'block';
        largeImage.src = imageURI;
    }
    
    function capturePhoto() {
        navigator.camera.getPicture(onPhotoDataSuccess, onFail, {
            quality: 50,
            destinationType: destinationType.FILE_URI
        });
    }
    
    function capturePhotoEdit() {
        navigator.camera.getPicture(onPhotoDataSuccess, onFail, {
            quality: 20,
            allowEdit: true,
            destinationType: destinationType.FILE_URI
        });
    }
    
    function getPhoto(source) {
        navigator.camera.getPicture(onPhotoURISuccess, onFail, {
            quality: 50,
            destinationType: destinationType.FILE_URI,
            sourceType: source
        });
    }
    
    function onFail(message) {
        alert('Failed because: ' + message);
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-02-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-03-20
      • 1970-01-01
      • 2019-07-18
      相关资源
      最近更新 更多