2014-09-12 88 views
4

这个问题已经被问了千万次,我已经尝试了所有的解决方案:的PhoneGap 3.5.0外部Safari浏览器窗口中打开链接无法使用

了“防止默认的”解决方案, 的“删除冲突的状态酒吧隐藏插件”的解决方案, 了 “_blank & _SYSTEM,位置= YES &无” 的解决方案(S)的变化,

但似乎没有工作。该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); }); 

但尽管如此,链接只是在应用程序中打开。没有听说过的“完成”按钮。没有Safari。

我的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

我不知道从何处排除此在此方面走。我甚至没有得到人们说你应该用inappbrowser得到的“完成”按钮,所以这让我觉得它不能正常工作。

任何和所有帮助大量赞赏。

回答

10

好吧,这是对我有效的答案。唯一有用的东西。我已经尝试了其他所有存在的解决方案。这是一个。

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

那家伙的解决方案。但是,这并不是很好解释,所以如果你觉得它很混乱,我会对它进行扩展。

我首先试着简单地搜索他正在谈论的文件,因为他没有告诉你它所在的位置。如果你这样做,出于某种原因你会得到一个笛卡儿结果,修改文件实际上不会工作。因此,这里是你如何得到它真正:

当您打开XCode中的项目,在左边栏中的文件列表(Project Navigator中),

  1. 展开“CordovaLib.xcodeproj
  2. 扩大”类“
  3. 展开”命令“
  4. 文件是”CDVWebViewDelegate。M”

命令+ 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'); 

呼。 Adobe确实需要更新他们的文档。

+0

嗨乔希,我有一个类似的问题,我正在测试世界上所有的解决方案,但没有,unfornately我没有访问iOS代码和webapp不在ipad中工作,并没有打开链接在新窗口中,纯JS中的任何解决方案而不是Objective-c代码?¿预先感谢您。 – inane 2015-02-12 15:49:43

+1

感谢您的解决方案!我不得不稍微修改它以使其工作,并添加两个条件:'[[NSString stringWithFormat:@“%@”,request.URL] rangeOfString:@“meteor.local”]。location == NSNotFound && [[NSString stringWithFormat:@“%@”,request.URL] rangeOfString:@“gap://”] .location == NSNotFound) – mav 2015-04-22 10:46:46

+1

这个解决方案适用于我...多么救命啊! – MizAkita 2015-08-13 01:35:49

相关问题