2

我已经使用 jQuery Mobile 1.2 为 iOS 构建了一个 Cordova 2.0 应用程序。里面的框架。我已经成功安装了 Childbrowser 插件(在这个版本这个指南中。感谢这些好人在这一点上的帮助,

现在我可以直接使用 onclick 事件调用 Childbrowser,并在头部使用此 javascript:

<script type="text/javascript">
  app.initialize();
  function launchCB() {
    if(window.plugins.childBrowser != null) {
      window.plugins.childBrowser.onLocationChange = function(loc){};
      window.plugins.childBrowser.onClose = function(){};
      window.plugins.childBrowser.onOpenExternal = function(){};
      window.plugins.childBrowser.showWebPage('http://www.google.de');
    } else {
      alert('not found');
    }
  }
</script>

或直接与例如

<a href="#" onclick="window.plugins.childBrowser.showWebPage('http://www.google.de');"> Google</a>

现在我想打开所有带有属性的链接target="_blank"。因此,我找到了这个线程并选择了 Charlie Gorichanaz 的解决方案。

但是当我在 iPhone 模拟器中启动应用程序时,我得到的只是沙钟,或者更确切地说是 jQuery mobile 的死亡旋转轮。

我很高兴每一个有用的建议,我从来没有在这个应用程序之前编码过。这是我的 index.html

<!DOCTYPE html>
<html>
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    <meta name = "format-detection" content = "telephone=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/index.css" />
    <title>Cordova</title>
    <script type="text/javascript" src="cordova-2.0.0.js"></script>
    <script type="text/javascript" src="ChildBrowser.js"></script>
    <gap:plugin name="ChildBrowser" /> <!-- latest release -->
    <script type="text/javascript" charset="utf-8" src="EmailComposer.js"></script>
    <script type="text/javascript" src="js/index.js"></script>
    <script type="text/javascript">
      app.initialize();
      function launchCB() {
        if(window.plugins.childBrowser != null) {
          window.plugins.childBrowser.onLocationChange = function(loc){};
          window.plugins.childBrowser.onClose = function(){};
          window.plugins.childBrowser.onOpenExternal = function(){};
          window.plugins.childBrowser.showWebPage('http://www.google.de');
        } else {
          alert('not found');
        }
      }
      /*
       var args;
       cordova.exec(null, null, "EmailComposer", "showEmailComposer", [args]);
     */
   </script>
   <!-- jQuery mobile -->
   <link type="text/css" rel="stylesheet" media="screen" href="jqm/jquery.mobile-1.2.0-alpha.1.min.css">
   <link type="text/css" rel="stylesheet" media="screen" href="jqm/Changes.css">
   <script type="text/javascript" src="jqm/jquery-1.7.2.min.js"></script>
   <script>
     // for using childbrowser to open pdf on remote sites
     $(document).bind( "mobileinit", function() {
       $.mobile.allowCrossDomainPages = true;
     }
   );
   // the function i want to implement
   $(document).bind("pageinit", function() {
     onDeviceReady();
   });
   function onDeviceReady() {
     var root = this;
     cb = window.plugins.childBrowser;
     if (cb != null) {
       $('a[target="_blank"]').click(function(event) {
         cb.showWebPage($(this).attr('href'));
         event.preventDefault();
         event.stopImmediatePropagation();
         return false;
       });
     }
   }
   // don't know is this thing is right in place...
   document.addEventListener("deviceready", onDeviceReady, false);
 </script>
 <script src="jqm/jquery.mobile-1.2.0-alpha.1.min.js"></script>
</head>
<body>
  <section data-role="page" id="home" data-theme="a" data-position="fixed">
    <div data-role="header"> <!-- header -->
      <h1>Test</h1>
      <div style="position:absolute; top:0px; right:5px;">
        <a href="#about" data-transition="pop">
          <img src="images/schlange-sw.png" alt="Schlange">
        </a>
      </div>
    </div>
    <!-- /header -->
    <div data-role="content"> <!-- content -->
      <a id="domainbut" onclick='launchCB()'>Working </a>
      <a href="http://www.google.de/" target="_blank" data-role="button" data-inline="true"> not working </a>
    </div>
    <!-- content -->
    <div data-role="footer" data-theme="a" data-position="fixed"></div>
  </section>
  <section data-role="dialog" id="about" data-close-btn-text="Close This Dialog">
    <div data-role="header">
      <h1>Über</h1>
    </div>
    <div data-role="content">
      <h1 style="text-align: center;"></h1>
      <div align="center">
    </div>
    <p style="text-align: center;">The owner of this app</p>
    <button onclick="cordova.exec(null, null, 'EmailComposer', 'showEmailComposer', [args]);">Compose Email</button>
    <p>
      <a href="#home" data-role="button" data-rel="back">OK</a>
    </p>
  </div>
</section>
</body>
</html>

先感谢您。

问候

基克

4

2 回答 2

1

@Kieke,如果您决定取消 ChildBrowser,我发现以下内容对我有用。

注意:假设您使用的是 PhoneGap 2.x

在你的Cordova.plist设置OpenAllWhitelistURLsInWebView = YES和设置你的ExternalHosts列表中,*很好。您希望 webview 不阻止的任何内容(在 Safari 或应用程序中查看)都必须在您的ExternalHosts列表中。

在您MainViewController.m将以下代码添加到底部时,您可以手动将任何 URL 重定向到 Safari,请参阅以下if语句www.loadDomainInSafari.com

- (BOOL) webView:(UIWebView*)theWebView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType
{
    NSURL *requestURL =[ [ request URL ] retain ];
    NSString *host = [ [ requestURL host] retain ];

    // if YES, directs to WebView
    // otherwise, takes OpenAllWhitelistURLsInWebView setting

    // if www.loadDomainInSafari.com, open in Safari by explictly stating NO.
    // otherwise take OpenAllWhitelistURLsInWebView setting of YES
    if ([host isEqualToString:@"www.loadDomainInSafari.com"]) {
        return ![ [ UIApplication sharedApplication ] openURL: [ requestURL autorelease] ];
    }
    [ requestURL release ];
    return [super webView:theWebView shouldStartLoadWithRequest:request navigationType:navigationType];
}
于 2012-11-05T15:29:18.437 回答
0

在您的Cordova.plist中,您是否拥有OpenAllWhitelistURLsInWebView = YES并且您要连接的所有域(例如 www.google.com、localhost)都在您的ExternalHosts列表中吗?

如@Littm 所述,查看 Xcode 调试器的控制台,您将看到您的链接是否因为不在白名单中而被阻止。

您还可以tail /var/log/system.log在执行后检查您的 system.log 是否有任何错误。

于 2012-11-02T20:10:35.353 回答