2014-09-12 2 views
4

Этот вопрос был задан миллион раз, и я попробовал все решения:PhoneGap 3.5.0 открыть ссылку в окне внешнего Safari не работает

в «предотвратить дефолт» решение, на «удалить конфликтующие статус бар скрывается плагин»решение, в„вариации _blank & _System, расположение = да & нет решения (ов)“,

Но ни один, кажется, работают. URL-адрес просто открывается в самом приложении, и у него нет возможности вернуться к нему.

Я даже попробовал этот код, который я видел в нескольких местах:

var ref = window.open('http://apache.org', '_blank', 'location=yes'); 
ref.addEventListener('loadstart', function(event) { alert('start: ' + event.url); }); 
ref.addEventListener('loadstop', function(event) { alert('stop: ' + event.url); }); 
ref.addEventListener('loaderror', function(event) { alert('error: ' + event.message); }); 
ref.addEventListener('exit', function(event) { alert(event.type); }); 

Но все-таки, ссылка просто открывается в приложении. Нет «сделанной» кнопки, о которой я слышал. Нет сафари.

Мой config.xml:

<feature name="http://api.phonegap.com/1.0/device" /> 

<!-- Platform Build --> 
<gap:platform name="ios" /> 

<!-- 
    If you do not want any permissions to be added to your app, add the 
    following tag to your config.xml; you will still have the INTERNET 
    permission on your app, which PhoneGap requires. 
--> 
<preference name="permissions"    value="none"/> 

<!-- Customize your app and platform with the preference element. --> 
<preference name="phonegap-version"   value="2.9.0" />   <!-- all: current version of PhoneGap --> 
<preference name="orientation"    value="default" />  <!-- all: default means both landscape and portrait are enabled --> 
<preference name="target-device"    value="universal" />  <!-- all: possible values handset, tablet, or universal --> 
<preference name="fullscreen"     value="true" />   <!-- all: hides the status bar at the top of the screen --> 
<preference name="webviewbounce"    value="true" />   <!-- ios: control whether the screen 'bounces' when scrolled beyond the top --> 
<preference name="prerendered-icon"   value="true" />   <!-- ios: if icon is prerendered, iOS will not apply it's gloss to the app's icon on the user's home screen --> 
<preference name="stay-in-webview"   value="false" />   <!-- ios: external links should open in the default browser, 'true' would use the webview the app lives in --> 
<preference name="ios-statusbarstyle"   value="black-opaque" /> <!-- ios: black-translucent will appear black because the PhoneGap webview doesn't go beneath the status bar --> 
<preference name="detect-data-types"   value="true" />   <!-- ios: controls whether data types (such as phone no. and dates) are automatically turned into links by the system --> 
<preference name="exit-on-suspend"   value="false" />   <!-- ios: if set to true, app will terminate when home button is pressed --> 
<preference name="show-splash-screen-spinner" value="true" />   <!-- ios: if set to false, the spinner won't appear on the splash screen during app loading --> 
<preference name="auto-hide-splash-screen" value="true" />   <!-- ios: if set to false, the splash screen must be hidden using a JavaScript API --> 
<preference name="disable-cursor"    value="false" />   <!-- blackberry: prevents a mouse-icon/cursor from being displayed on the app --> 
<preference name="android-minSdkVersion"  value="7" />    <!-- android: MIN SDK version supported on the target device. MAX version is blank by default. --> 
<preference name="android-installLocation" value="auto" />   <!-- android: app install location. 'auto' will choose. 'internalOnly' is device memory. 'preferExternal' is SDCard. --> 

<preference name="OpenAllExternalURLsInWebView" value="true" /> 


<!-- Plugins can also be added here. --> 
<gap:plugin name="org.apache.cordova.inappbrowser" /> 

<!-- Define app icon for each platform. --> 

<!-- icons --> 
<icon src="icons/ios/icon-57.png" /> <!-- default --> 
<icon src="icons/ios/icon-29.png" gap:platform="ios" width="29" height="29" /> 
<icon src="icons/ios/icon-29_at_2x.png" gap:platform="ios" width="58" height="58" /> 
<icon src="icons/ios/icon-40.png" gap:platform="ios" width="40" height="40" /> 
<icon src="icons/ios/icon-40_at_2x.png" gap:platform="ios" width="80" height="80" /> 
<icon src="icons/ios/icon-50.png" gap:platform="ios" width="50" height="50" /> 
<icon src="icons/ios/icon-50_at_2x.png" gap:platform="ios" width="100" height="100" /> 
<icon src="icons/ios/icon-57.png" gap:platform="ios" width="57" height="57" /> 
<icon src="icons/ios/icon-57_at_2x.png" gap:platform="ios" width="114" height="114" /> 
<icon src="icons/ios/icon-60.png" gap:platform="ios" width="60" height="60" /> 
<icon src="icons/ios/icon-60_at_2x.png" gap:platform="ios" width="120" height="120" /> 
<icon src="icons/ios/icon-72.png" gap:platform="ios" width="72" height="72" /> 
<icon src="icons/ios/icon-72_at_2x.png" gap:platform="ios" width="144" height="144" /> 
<icon src="icons/ios/icon-76.png" gap:platform="ios" width="76" height="76" /> 
<icon src="icons/ios/icon-76_at_2x.png" gap:platform="ios" width="152" height="152" /> 
<icon src="icons/ios/icon-120.png" gap:platform="ios" width="120" height="120" /> 
<icon src="icons/ios/icon-120_at_2x.png" gap:platform="ios" width="240" height="240" /> 
<icon src="icons/ios/icon-512.png" gap:platform="ios" width="512" height="512" /> 
<icon src="icons/ios/icon-512_at_2x.png" gap:platform="ios" width="1024" height="1024" /> 

<!-- launch screens --> 
<gap:splash gap:platform="ios" height="480" src="splash/ios/Default-iphone.png" width="320" /> 
<gap:splash gap:platform="ios" height="960" src="splash/ios/Default-iphone_x2.png" width="640" /> 
<gap:splash gap:platform="ios" height="1136" src="splash/ios/splash-iphone5-538h.png" width="640" /> 
<gap:splash gap:platform="ios" height="1024" src="splash/ios/Default-iPad-Portrait.png" width="768" /> 
<gap:splash gap:platform="ios" height="2008" src="splash/ios/Default-iPad-Portrait_x2.png" width="1536" /> 
<gap:splash gap:platform="ios" height="768" src="splash/ios/Default-iPad-Landscape.png" width="1024" /> 
<gap:splash gap:platform="ios" height="1496" src="splash/ios/Default-iPad-Landscape_x2.png" width="2048" /> 

<access origin="*"/> <!-- allow local pages --> 

<!-- plugins --> 

<feature name="StatusBar"> 
    <param name="ios-package" onload="true" value="CDVStatusBar" /> 
</feature> 
<preference name="StatusBarOverlaysWebView" value="true" /> 
<preference name="StatusBarBackgroundColor" value="#000000" /> 


<feature name="InAppBrowser"> 
    <param name="ios-package" value="CDVInAppBrowser" /> 
</feature> 

И мой index.html, в настоящее время:

<a href="http://google.com" target="_system">Google</a> 
[...] 
<script src="scripts/vendor.js"></script> 

<script src="scripts/main.js"></script> 

<script src="scripts/plugins.js"></script> 

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


<script> 
document.addEventListener("deviceready", onDeviceReady, false); 

// function onDeviceReady() { 
//  StatusBar.hide(); 
// } 

$('a').click(function(event) { 
    event.preventDefault(); 
    window.open($(this).attr("href"), "_system"); 
}); 
</script> 

Я также пробовал, так что тег выглядит следующим образом:

<a href="#" onclick="window.open('http://google.com', '_system', 'location=yes');">Google</a> 

Тот же результат: открывается в приложении.

я могу видеть, существуют плагины в MYAPP/плагинов:

http://i.imgur.com/MKmafG4.png

Я понятия не имею, куда идти из приведенных здесь с точки зрения устранения неполадок это. Я даже не получаю кнопку «done», что люди говорят, что вы должны получить с помощью inappbrowser, так что это заставляет меня думать, что он работает неправильно.

Любая помощь в значительной степени ценится.

ответ

10

Хорошо, ребята, вот ответ, который сработал для меня. Единственное, что сработало. Я пробовал буквально любое другое решение, которое существует. Это одно.

http://www.excellentwebworld.com/phonegap-open-a-link-in-safari-or-external-browser/

Это решение парня. Однако это не очень хорошо объяснено, поэтому я буду расширять его, если вы считаете, что это запутывает.

Я попробовал сначала просто найти файл, о котором он говорит, потому что он не говорит вам, где он находится. Если вы это сделаете, по какой-то причине вы получите декартовой результат, и изменение файла на самом деле не будет работать. Так вот, как вы получите к нему по-настоящему:

При открытии проекта в XCode, в левой боковой панели файлового списка (Project Navigator),

  1. расширить "CordovaLib.xcodeproj
  2. расширить" Классы "
  3. expand" Commands "
  4. файл -" CDVWebViewDelegate.м»

Ctrl + F, чтобы найти„shouldstartloadwith“, и вы найдете функцию Старой функцию, используемую для начала, как это:.

(BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType 
{ 
    BOOL shouldLoad = YES; 

Вы собираетесь изменить его, чтобы выглядеть следующим образом :

(BOOL)webView:(UIWebView*)webView shouldStartLoadWithRequest:(NSURLRequest*)request navigationType:(UIWebViewNavigationType)navigationType 
{ 

    if([[NSString stringWithFormat:@"%@",request.URL] rangeOfString:@"file"].location== NSNotFound) 
    { 
     [[UIApplication sharedApplication] openURL:[request URL]]; 
     return NO; 
    } 
    BOOL shouldLoad = YES; 

Затем используйте:

window.open('http://google.com', '_system'); 

Whew , Adobe действительно нуждается в обновлении своих документов.

+0

Привет, Джош, у меня есть аналогичная проблема, и я тестирую все решения в мире, но нет, несговорно, у меня нет доступа к iOS-коду, и webapp не работает в ipad и не открывает ссылку в новом окне, любое решение в чистом JS вместо кода Objective-c? Спасибо заранее. – inane

+1

Спасибо за это решение! Мне пришлось немного изменить его, чтобы он работал, добавив еще два условия: '[[NSString stringWithFormat: @"% @ ", request.URL] rangeOfString: @" meteor.local "]. Location == NSNotFound && [[NSString stringWithFormat: @ "% @", request.URL] rangeOfString: @ "gap: //"] .location == NSNotFound) ' – mav

+1

Это решение сработало для меня ... что такое спасатель! – MizAkita

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