Приложение 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
Имеет ли значение порядок настроек, я имею в виду установить в конце или в начале?