【问题标题】:Cordova Phonegap Barcode plugin won't launch from my Intel XDK appCordova Phonegap 条码插件无法从我的英特尔 XDK 应用程序启动
【发布时间】:2016-02-06 12:21:36
【问题描述】:

我一直在使用英特尔 XDK 构建小型应用程序。我尝试打开 Phonegap 条码扫描仪,但单击启动按钮时没有任何反应。我的目标是扫描二维码并打开包含结果数据的 inAppBrowser 链接。我同时安装了 Device (cordova-plugin-device) 和 Barcode Scanner (phonegap-plugin-barcodescanner) 插件,并具有相机和闪光灯的权限。

这是我的代码:

<script type="text/javascript">           

    document.addEventListener("deviceready", scanNow, false);

     function scanNow() {

cordova.plugins.barcodeScanner.scan(
  function (result) {
    //  alert("We got a barcode\n" +
     //      "Result: " + result.text + "\n" +
     //       "Format: " + result.format + "\n" +
     //       "Cancelled: " + result.cancelled);

         window.open("http://www.example.com?qr=" + result.text, '_system', 'location=no');


  }, 
  function (error) {
      alert("Error: " + error); 
  });}

</script> 

这是启动按钮:

<a role='button' onclick="scanNow();">Scan</a>

编辑:我通过将此链接添加到我的索引页头的虚拟脚本来解决问题。

<script src="cordova.js"></script>

【问题讨论】:

    标签: javascript cordova cordova-plugins intel-xdk


    【解决方案1】:

    您不需要在deviceready 事件上调用scanNow() 函数,您只需要确保在deviceready 事件触发之前之后 不会调用它.由于您正在调试,我会将那行更改为...

    document.addEventListener("deviceready", alertDeviceReady, false);
    

    ...并添加一个alertDeviceReady(),它会为您提供警报或控制台消息。通常需要一两秒钟,但在速度较慢的设备上或者如果您有一些需要较长初始化时间的插件时可能需要更长的时间。

    这将是一个安全问题...

    window.open("http://www.example.com?qr=" + result.text, '_system', 'location=no');
    

    ...因为您不应该将 web 视图打开到另一个页面(您正在远离运行您的应用程序的内置 web 视图,您没有与网站关联)。

    您可以使用 inAppBrowser 在 web 视图之上打开一个备用视图,但我建议您使用明确命名的 inAppBrowser API,并且不要假设它已被别名为使用 window.open() -- 因为他们已经弃用了这种用法,我相信它在默认安装中不再有别名。也就是说,尝试使用...

    cordova.inAppBrowser.open()
    

    ...相反。

    请参阅docs here,其中还将包含有关该插件当前版本的详细信息(可能仅适用于 CLI 5+ 版本),并包含指向 github 存储库的链接以获取更多信息。

    【讨论】:

    • 感谢您的 cmets 并指出链接的安全问题。我通过在我的索引页面的头部添加指向这个虚拟文件 的链接解决了主要问题。
    • 绝对需要它来使任何 Cordova 插件工作,这是一个在构建时创建并添加到您的应用程序的魔法脚本。它初始化 Cordova 框架并为您的应用程序中包含的所有 Cordova 插件调用 init 函数。这就是生成 {{deviceready}} 事件的代码,以及为什么在调用任何 Cordova 插件 API 之前等待发出 {{deviceready}} 事件很重要。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-15
    • 1970-01-01
    相关资源
    最近更新 更多