2

Я создал приложение Cordova 2.0 для iOS с jQuery Mobile 1.2. Рамка внутри. Я успешно установил плагин Childbrowser (в this version и this guide Спасибо за помощь от этих хороших парней в этой точке,Позвонить Childbrowser с target = "_ blank"/Cordova 2.0/jQuery Mobile 1.2.0

Теперь я могу назвать Childbrowser непосредственно с событием OnClick с этим 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". Поэтому я нашел this thread и взял тыс решение Чарли Горичаназа.

Но когда я запускаю приложение в симуляторе 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> 

Спасибо заранее.

С уважением

Kieke

+0

ли вы получить какую-либо ошибку на консоли? – Littm

ответ

0

В вашем Cordova.plist, у вас есть OpenAllWhitelistURLsInWebView = YES и все домены (например. Www.google.com, локальный) вы подключаетесь в вашем ExternalHosts списке?

Посмотрите в консоли своего отладчика Xcode, как описано в @Littm, вы увидите, заблокирована ли ваша ссылка, потому что они не находятся в белом списке.

Вы также можете проверить свой system.log, tail /var/log/system.log за любые ошибки после выполнения.

+0

Спасибо за совет, но нет белых отклонений. Я установил Asterisk в Externalhosts, так что все запросы разрешены. Я думаю, что есть ошибка в моем коде, но я не получаю никаких ошибок в консоли. Я был бы счастлив, если бы это был отказ, но я проверю журнал, который вы упомянули. – Kieke

+0

@Kieke, проверьте ответ выше, он покажет вам, как вручную открыть окно Safari при условии if-condition. Не требуется подключаемый модуль. – sonjz

1

@Kieke, если вы решили покончить с ChildBrowser, я обнаружил, что для меня это работало.

Примечание: Предположим, что вы используете PhoneGap 2.x

В вашем Cordova.plist набор OpenAllWhitelistURLsInWebView = YES и установить ExternalHosts список, * прекрасно. Все, что вы хотите, чтобы веб-просмотр не блокировался (просматривался в 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]; 
} 
+0

Не видел это решение в другом месте. Благодаря! –

Смежные вопросы