2016-09-24 69 views
1

我在为Cordova实现Card.io插件时遇到了一些麻烦。还有如何安装和实施插件GitHub的页面上的说明:https://github.com/card-io/card.io-Cordova-PluginCordova Card.IO插件实现

我做

$ cordova plugin add https:///... 

添加的切入并补充他们告诉你GitHub的页面上添加按钮。到目前为止,我很确定我正在尽我所能。现在问题来了,但在应用程序中的实际实现。我在我的应用程序中使用了ui框架,因此我没有index.js文件,我的代码也不像标准index.js中关于deviceReady处理的代码。我只是做...

.ready(function() { 
    // Code to fire on device ready. 
}): 

我对回调有些熟悉,但我不知道他们的例子中发生了什么。整个“例子:function(){...”对我来说是全新的。

有人可以重写该示例,以便它是一些结构良好,使得更有意义的功能?

我试着这样做,我的代码现在看起来像这样:

.ready(function() { 
     CardIO.canScan(onCardIOCheck); 
    }); 

    function onCardIOComplete() { 
     var cardIOResponseFields = [ 
      "cardType", 
      "redactedCardNumber", 
      "cardNumber", 
      "expiryMonth", 
      "expiryYear", 
      "cvv", 
      "postalCode" 
     ]; 

     var len = cardIOResponseFields.length; 
     alert("card.io scan complete"); 
     for (var i = 0; i < len; i++) { 
      var field = cardIOResponseFields[i]; 
      alert(field + ": " + response[field]); 
     } 
    } 

    function onCardIOCancel() { 
     alert("card.io scan cancelled"); 
    } 

    function onCardIOCheck(canScan) { 
     alert("card.io canScan? " + canScan); 
     var scanBtn = document.getElementById("scanBtn"); 
     if (!canScan) { 
      scanBtn.innerHTML = "Manual entry"; 
     } 

     scanBtn.addEventListener("click", function(e) { 
      var options = { 
       "requireExpiry": true, 
       "requireCVV": false, 
       "requirePostalCode": false, 
       "restrictPostalCodeToNumericOnly": true 
      }; 
      CardIO.scan(options, onCardIOComplete, onCardIOCancel); 
     }); 
     } 

这不工作,虽然。我在.ready()函数内部的调用的两侧添加了alert(),以查看它是否触发。这两者都会触发,但它好像Card.canScan()函数根本不会触发。我还在onCardIOCheck函数中添加了一个alert(),以查看它是否到达,但事实并非如此。

任何帮助将不胜感激。

(请注意:我不使用Angular.js,我只用纯JavaScript偶有jQuery的)

回答

1

您需要更换

.ready(function() { 
    CardIO.canScan(onCardIOCheck); 
}); 

随着

document.addEventListener('deviceready', function() { 
    CardIO.canScan(onCardIOCheck); 
}, false); 

的你正在使用的准备好的事件是DOM的准备事件,而不是cordova插件。我相信当你调用CardIO.canScan(onCardIOCheck);这个插件没有被加载,那为什么它不工作。

+0

谢谢,我试过你的解决方案。它有帮助,但不完全工作。它有助于Card.io现在正确启动。但是,它会关闭canScan功能,但回调不会触发。更令人感到奇怪的是,当我将应用程序置于后台并返回时,回调触发状态为“true”,这是积极的。但为什么只有当应用程序在后台时才会触发。然后,当我点击按钮时,什么都没有发生,但是当我将应用程序放在后台时,它会调出Card.io界面。接口再次只能在后台运行。思考? – user1840352