Phonegap:BarcodeScanner& Childbrowser插件

时间:2012-08-27 15:49:45

标签: ios phonegap-plugins barcode-scanner childbrowser

我使用这2个PhoneGap插件时遇到问题:“BarcodeScanner”& “ChildBrowser”(在iOS应用程序中,使用XCode 4和PhoneGap 2.0)。

我的应用用户界面上有一个“扫描”按钮。当用户点击此按钮时,条形码扫描仪将启动。

因此,在条形码扫描器回调的Success函数中,我需要在新的Childbrowser窗口(应用程序内部)中从扫描中打开恢复的URL。

但是新的Childbrowser窗口从未打开,而控制台显示“正在打开URL:http://fr.wikipedia.org/”(例如)。

这是我的JS部分代码:

$("#btnStartScan").click(function() {
       var scanBarcode = window.plugins.barcodeScanner.scan(
                           function(result) {
                                    if (!result.cancelled){
                                         openUrl(result.text);
                                    }
                            },
                            function(error) {
                                    navigator.notification.alert("scanning failed: " + error);
       });
 });

function openUrl(url)
{
      try {
          var root = this;
          var cb = window.plugins.childBrowser;

          if(cb != null) {
                    cb.showWebPage(url);
          }
          else{
              alert("childbrowser is null");
          }
       }
       catch (err) {
           alert(err);
       }
}

如果我在确认警报回调中调用openURL()函数,那么一切正常,例如:

if (!result.cancelled){
        navigator.notification.confirm("Confirm?",
                                       function (b) {
                                              if (b === 1) {
                                                   openUrl(result.text);
                                              }
                                       },
                                       'Test',
                                       'Yes, No');
 } 

但是我需要在扫描后直接启动ChildBrowser窗口,没有任何确认警报等。

有人知道如何解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

我也有同样的问题。

通过设置超时解决它。

   var scanBarcode = window.plugins.barcodeScanner.scan(
                       function(result) {
                                if (!result.cancelled){
                                     setTimeout(function(){ openUrl(result.text); },500);
                                }
                        },
                        function(error) {
                                navigator.notification.alert("scanning failed: " + error);
   });

答案 1 :(得分:1)

我遇到了完全相同的问题。

我的应用程序还有另一种机制来显示除条形码阅读器之外的网页,当我执行该操作时,我可以看到条形码相关页面已加载,但它从未显示过。

在ChildBrowserViewController.m中,我正在查看loadURL()的{​​{1}}的最后一行,我认为在我们条形码后儿童浏览器设置可见但是条形码阅读器的某些内容窗口导致子浏览器被设置为错误的z顺序,但我不熟悉sdk知道如何测试或尝试将它带到前面。

希望这有助于确定可能的区域。