Приложение Cordova Wrapper, где внутренние ссылки загружаются в приложение, внешние ссылки загружаются в браузер

У меня есть простое приложение Cordova, которое указывает на внешнюю веб-страницу, не определяя никаких своих собственных представлений.

Я хотел бы, чтобы все внутренние ссылки из этого домена загружались внутри приложения, но все внешние ссылки (http://twitter.com и т.д.). для загрузки в системный браузер, поэтому на страницах есть функции Back/Forward.

В обычном приложении с представлениями я мог бы установить target='_system' для загрузки ссылок в браузере по умолчанию или использовать cordova-plugin-inappbrowser явно открывать ссылки в представлении веб-браузера. К сожалению, в этом случае у меня нет возможности редактировать код на стороне сервера, поэтому вам нужно решение, которое работает в приложении.

Если я определяю config.xml как таковой, тогда как внутренние, так и внешние ссылки загружаются в приложение.

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

Если я определяю config.xml с allow-intent, тогда внутренние и внешние ссылки открываются в системном браузере.

<content src="http://example.com/" />
<access origin="*" />
<allow-navigation href="*" />
<allow-intent href="#" onclick="location.href='http://*/*'; return false;" />
<allow-intent href="#" onclick="location.href='https://*/*'; return false;" />

Другие имеют , используя пользовательский javascript для переопределения target to _system, однако, поскольку у меня нет собственных взглядов, я не могу этого сделать.

Можно ли определить allow-intent для cordova-plugin-whitelist таким образом, чтобы включить все URL-адреса, которые не являются внутренним доменом

Или мне нужно каким-то образом переопределить shouldStartLoadWithRequest в MainViewController, а затем вызвать [[UIApplication sharedApplication] openURL:url]?

Ответ 1

Хорошо, после некоторых экспериментов и предложений от Hayyaan я смог придумать комбинацию allow-navigation и allow-intent, которая служила моей цели.

<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://*/*" />

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

Примечание. Я включил <allow-navigation href="https://*.facebook.com/*" />, чтобы разрешить загрузку библиотек Facebook, иначе я получил сообщение об ошибке.

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

А также включил <allow-navigation href="about:*" />, чтобы избежать ошибки для about:blank.

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

Надеюсь, это поможет кому-то еще с той же проблемой:)

Ответ 2

Имеет ли значение порядок настроек, я имею в виду установить в конце или в начале?