В приложении Ionic Cordova внешние гиперссылки в контенте между источниками в iframe работают на Android, но не работают на iOS - PullRequest
0 голосов
/ 07 ноября 2019

У меня есть приложение ionic 5 Cordova 9, которое требует следующего поведения:

  1. В этом приложении должны загружаться графические баннеры, обслуживаемые веб-службой перекрестного происхождения, очевидно, внутри iframe.
  2. Графический баннер имеет гиперссылку, и после щелчка системный браузер должен перейти на ту веб-страницу, которая является еще одним перекрестным источником.

Вышеописанное прекрасно работает на Android с помощью config.xml и index.html, автоматически сгенерированных ionic & Cordova CLI. Когда я перенес код в iOS, мне пришлось внести изменения как в config.xml, так и в index.html, чтобы получить содержимое в iframe: после изменений в Config.xml есть соответствующие записи

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

Я добавил следующее в index.html

<meta http-equiv="Content-Security-Policy" content="default-src 'self' data: gap: https://ssl.gstatic.com 'unsafe-eval'; style-src 'self' 'unsafe-inline'; child-src *">

После вышеуказанных изменений я получаю баннер в iframe, но когда я нажимаю на баннер, ничего не происходит. Safari показывает, что сетевой запрос не генерируется. Как объяснялось ранее, я не контролирую содержимое iframe, поэтому не могу использовать InAppBrowser или аналогичные решения.

Я также пытался удалить cordova-plugin-whitelist, так как это не требуется на iOS, но это не имело никакого значения. Сейчас я не беспокоюсь об усилении безопасности. Я хочу заставить это работать сначала. Я изучил руководство по созданию белых списков Cordova и рассмотрел все связанные вопросы о переполнении стека, но не нашел решения. Я прошу рекомендации от экспертов.

1 Ответ

0 голосов
/ 12 ноября 2019

Я создал гиперссылку на странице напрямую, в дополнение к гиперссылке в iframe. После нескольких наблюдений я мог выделить <allow-navigation> как тег config.xml, который имел значение для этой проблемы.

Когда я удалил тег <allow-navigation href="*" /> из config.xml, гиперссылкана странице работал, но содержимое iframe не были заполнены.

и когда я вернул тег <allow-navigation href="*" />, iframe теперь заполнен, но гиперссылка со страницы и из iframe не работает.

Это намекает на то, что мне нужно что-то посередине.

Затем я изменил тег на этот <allow-navigation href="*://*.iframeContentDomain.com/*" />, и это восстановило как содержимое iframe, так и рабочие гиперссылки со страницы & iframe.

...