2015-10-03 163 views
2

此問題已被詢問a fewtimesbefore,但所有的解決方案可以追溯到2013年,我還沒有得到任何與PhoneGap Build/Cordova最新版本一起工作的答案。使用Cordova,我如何才能在Chrome中打開外部網址,而不是在應用內瀏覽器中?

我有一個這樣的鏈接,我想在Android上的Chrome中打開。

<a href="https://twitter.com/humphreybc" target="_blank">Twitter</a> 

在​​3210我有以下規則:

<allow-navigation href="*" /> 
<allow-intent href="http://*/*" /> 
<allow-intent href="https://*/*" /> 
<access origin="*" /> 

我一直在使用window.open(url, _system)試圖在其他的答案建議 - 並列入了cordova-plugin-inappbrowser插件 - 但是:

  1. 這個解決方案沒有按似乎沒有工作,鏈接只是在應用程序瀏覽器打開
  2. 我寧願簡單地Ë目標=「_空白」,而不是使用一個onClick處理程序,每一個環節

我也跟着指示in this blog,並增加了與_target='blank'屬性鏈接的處理程序:

$(document).on('click', 'a[target="_blank"]', function (e) { 
    e.preventDefault(); 
    var url = this.href; 
    window.open(url,"_system");      
}); 

...但仍然會在應用內瀏覽器中打開鏈接。

+0

http://stackoverflow.com/questions/15534630/phonegap-build-how-to-open-external-url-in-device-browser-on-android –

+0

@PeterScott感謝評論,但我不相信這是一個PhoneGap構建問題。此外,答案是2.5歲,所以現在可能不相關。 –

+0

你是如何安裝插件的?該代碼應該工作。你可以嘗試'cordova.InAppBrowser.open(url,「_ system」); ' – jcesarmobile

回答

0

通過老問題,只是要回以及將它們標記爲已回答。最後我做這個:

function onDeviceReady() { 
    return $(document).on('click', 'a[target="_blank"]', function(e) { 
    e.preventDefault(); 
    return window.open(this.href, '_system'); 
    }); 
}; 

if (!!window.cordova) { 
    document.addEventListener('deviceready', onDeviceReady, false); 
} 
+0

如果我們通過m3u8網址,您的解決方案可以在Chrome瀏覽器上播放m3u8嗎? – user1788736

0

我使用Cordova和JQM,我使用這個函數來處理打開設備瀏覽器中的鏈接。

function open_url(link) { 
    var ref = window.open(encodeURI(link), '_system',  'transitionstyle=fliphorizontal'); 
} 

也許值得嘗試,包括使用encodeURI ..什麼HTML框架/庫是您使用(其它離子/ JQM?)

0

你有沒有嘗試過這樣的事情(在你的JS代碼):

navigator.app.loadUrl(url, { openExternal: true }); 
0

在我的情況下,我想使用Chrome或基於Cordova應用程序內的用戶設置的任何系統默認協議處理程序。在iOS和其他可能的平臺上,_systemgooglechrome:這樣的協議無法正常工作(inappbrowser version 1.1.1和cli Cordova 5.4.1或iOS js cordova.version = 3.9.2沒有任何反應)。基於my quick scan of the source_self以混合應用webview爲目標,_system被傳遞並且每個其他目標都轉到另一個webview。我發現了一種使用hidden=yes隱藏iab窗口的方法,它只是將請求傳遞給操作系統。所以這有效地進行了協議的系統調用。應用程序需要在config.xml中提供適當的原產地/意向聲明,就像您提到的那樣,並且可能還會在下面的腳本中打開時檢查或調整協議(例如,將http:更改爲googlechrome:)。

$(document).on('click', (function(base){ 
/* 
this single-page hybrid app uses fragment (ie #/go/here/now) to navigate 
so links will always have the same base url eg 
file:///path/to/app.html 
http://localhost/path/to/app.html 
*/ 
var open; 
base = base.location.origin + base.location.pathname; 
return function(e){ 
    var a, href; 
    if(!(a=e.target.closest('a')) || (href=a.href).indexOf(base) === 0 || !href) return; 
    e.preventDefault(); 
    // assuming cordova is available with the plugin https://github.com/apache/cordova-plugin-inappbrowser 
    // use with any protocol eg: 'googlechrome://www.google.com/' tel:+18005551212 http://stackoverflow.com 
    window._external_app_window = (open || (open = ((window.cordova||{}).InAppBrowser||window).open))(
     href, '_external_app_window', 'hidden=yes' 
    ); 
}; 
})(this)) 
.on('resume', function(){ 
    if(window._external_app_window) window._external_app_window.close(); 
}); 
-2

你可以試試這個

<a class="item" href="#" onclick="window.open('https://twitter.com/humphreybc', '_system', 'location=yes'); return false;">Open Browser</a> 
相關問題