Невозможно использовать плагин InAppBrowser для Phonegap 3.1 на iOS 7

Я в процессе портирования приложения iOS, которое я создал с помощью Phonegap для iOS7 с помощью Phonegap 3.1, и я столкнулся с небольшой проблемой.

iOS 7, похоже, внес существенные изменения в то, что гиперссылки с target="_blank" attribute теперь открываются по умолчанию в самом приложении, а не в системном браузере (это, похоже, не происходит на Android или предыдущих версиях iOS, однако). Это нарушило некоторые функции приложения, и мне нужно исправить это.

Использование плагина InAppBrowser похоже на способ перехода, поэтому я установил плагин. Я изменил свой config.xml, чтобы включить это:

<feature name="InAppBrowser">
        <param name="ios-package" value="CDVInAppBrowser" />
</feature>

И ссылка в шаблоне теперь выглядит так (обратите внимание, что я использую Handlebars в качестве системы шаблонов здесь):

<a href="#" onclick="window.externalbrowser = window.open('{{this.url}}, ', '_system', 'location=yes');" data-transition="slide">
    <img alt="Favicon" style="border: 1px solid #ccc;" title="Favicon" class="ui-li-icon" src="{{this.favicon_url}}"></img>
    <p style="font-size: 100%"><strong>Submitted {{this.whenSubmitted}}</strong><br />Last changed {{this.lastChanged}}</p>
</a>

Всякий раз, когда я нажимаю ссылку, она не открывается, и я вижу следующую ошибку в журналах:

Plugin 'InAppBrowser' not found, or is not a CDVPlugin. Check your plugin mapping in config.xml.
2013-11-08 10:22:56.753 MyApp[197:60b] -[CDVCommandQueue executePending] [Line 117] FAILED pluginJSON = [
  "InAppBrowser814285423",
  "InAppBrowser",
  "open",
  [
    "http:\/\/www.site.co.uk\/deals-offers-savings\/b?ie=UTF8&node=350613011&tag=page0e-21,",
    "_system",
    "location=yes"
  ]
]

Существует также ряд предупреждений об устаревании исходного файла CDVInAppBrowser.m.

Я не могу на всю жизнь понять, почему плагин не подбирается. Может ли кто-нибудь еще предположить, что может быть проблемой?

Ответ 1

Я нашел для вас истинное решение без необходимости воссоздать проект. на основе этого ответа: аналогичный вопрос и ответ

Похоже, это происходит потому, что иногда файлы проекта xcode не обновляются после добавления/удаления плагинов. Все файлы на месте, и config.xml в порядке, но Проект xcode не может пометить новые файлы плагинов как целевые приложения.

enter image description here

Решение:

  • Откройте проект в xcode
  • Перейдите к соответствующему файлу плагина (файл CDV *.m)
  • В правом меню в разделе "Целевое членство" убедитесь, что флажок установлен для вашего приложения.

enter image description here

Ответ 2

ОБНОВЛЕНИЕ. Попробуйте ответить ниже, прежде чем приступать к воссозданию совершенно нового проекта. Это простое, простое в использовании решение, которое, как представляется, работает хорошо. Спасибо, Барри!

Я несколько раз сталкивался с подобной ошибкой после удаления плагинов и их повторной установки. Единственное решение, которое когда-либо работало для меня, - начать заново с нового проекта приложения, а затем скопировать обратно в файлы из моей "www" папки и переделать любые необходимые изменения в Xcode.

Глядя на https://issues.apache.org/jira/browse/CB-4971, похоже, что это ошибка, которую команда Кордовы пытается отследить. У этой ссылки есть несколько альтернативных предложений, но запуск заново по-прежнему, вероятно, проще, если только ваше приложение не имеет много настраиваемых изменений Xcode, которые необходимо будет переделать.

Я не знаком с Handlebars, но ваш код выглядит как дополнительная запятая и пробел после {{this.url}}. Но я думаю, что ваша основная проблема связана с самим плагином, а не с кодом.

Кстати, если вы правильно установили плагин InAppBrowser с помощью командной строки, вам не нужно вручную изменять файл config.xml, так как необходимый код плагина будет автоматически добавлен в файлы config.xml соответствующих платформ, когда вы строите свой проект.

Ответ 3

Его легко исправить:

В папках /plugins/ и /platforms/ios/myApp/Plugins/ также должен быть каталог org.apache.cordova.inappbrowser. Он должен выглядеть так:

-----/org.apache.cordova.inappbrowser
---------/CDVInAppBrowser.h
---------/CDVInAppBrowser.m

Ответ 4

По какой-то причине org.apache.cordova.inappbrowser, похоже, не работает с моим приложением - возможно, обновление или что-то сломало функциональность. Плагин присутствовал как @star18bit, но я думаю, что моя проблема была совместимость.

Я удалил существующий плагин:

cordova plugin remove org.apache.cordova.inappbrowser

Переустановлено с помощью cordova-plugin-inappbrowser:

cordova plugin add cordova-plugin-inappbrowser

После ionic build ios и перезапуска проблема была решена.