2016-05-10 10 views
11

Ich habe eine einfache Cordova Wrapper-App, die auf eine externe Webseite zeigt, ohne eine eigene Ansichten zu definieren.Cordova Wrapper App, wo interne Links laden in der App, externe Links laden im Browser

würde ich alle internen Links von dieser Domäne wie in der App, aber alle externen Links (http://twitter.com, etc.) im System-Browser, so dass die Seiten haben Back/Forward Funktionalität zu ladende geladen werden.

In einer normalen App mit Ansichten konnte ich target='_system' festlegen, um Links im Standardbrowser zu laden, oder cordova-plugin-inappbrowser verwenden, um Verknüpfungen in einer Webbrowseransicht explizit zu öffnen. Leider habe ich in diesem Fall nicht die Möglichkeit, den Server-Code zu bearbeiten, also brauche ich eine Lösung, die innerhalb der App funktioniert.

Wenn ich die config.xml als solche definiere, dann werden sowohl interne als auch externe Links in App geladen.

<content src="http://example.com/" /> 
<access origin="*" /> 
<allow-navigation href="*" /> 

Wenn ich die config.xml mit allow-intent definieren, dann interne und externe Links sind im System-Browser geöffnet.

<content src="http://example.com/" /> 
<access origin="*" /> 
<allow-navigation href="*" /> 
<allow-intent href="http://*/*" /> 
<allow-intent href="https://*/*" /> 

Others haben suggested mit benutzerdefinierten JavaScript, um die target-_system jedoch außer Kraft zu setzen, da ich nicht meine eigene Meinung habe, kann ich nicht wirklich tun.

Ist es möglich, allow-intent für die cordova-plugin-whitelist so zu definieren alle URLs enthalten, die nicht die interne Domäne sind?

Oder muss ich irgendwie shouldStartLoadWithRequest in MainViewController überschreiben und dann [[UIApplication sharedApplication] openURL:url] anrufen?

Antwort

7

Ok, nach ein paar Experimenten und Vorschlägen von Hayyaan konnte ich eine Kombination von allow-navigation und allow-intent finden, die meinen Zweck erfüllten.

<content src="https://example.com/" /> 
<access origin="*" /> 
<allow-navigation href="about:*" /> 
<allow-navigation href="https://example.com/*" /> 
<allow-navigation href="https://*.example.com/*" /> 
<allow-navigation href="https://*.facebook.com/*" /> 
<allow-intent href="http://*/*" /> 
<allow-intent href="https://*/*" /> 

Jetzt alle internen Links von der Website-Domain in der App, während externe Links im System Browser geladen werden geladen.

Hinweis, ich habe <allow-navigation href="https://*.facebook.com/*" /> enthalten, um das Laden von Facebook-Bibliotheken zu erlauben, sonst habe ich einen Fehler erhalten.

ERROR Internal navigation rejected - 
<allow-navigation> not set for url='https://staticxx.facebook.com/connect/xd_arbiter.php? 

Und gehörte auch <allow-navigation href="about:*" /> einen Fehler für about:blank zu vermeiden.

ERROR Internal navigation rejected - <allow-navigation> not set for url='about:blank' 

Hoffentlich hilft dies jemand anderes mit dem gleichen Problem :)

+0

wie Sie dies tun erreichen? Einige abc.example.com in der Webansicht und xyz.example.com in externen Browser navigiert werden ! – NitZRobotKoder

Verwandte Themen