Иногда PhoneGap открывает веб-страницы в браузере Android, иногда он открывает их в UIWebView. Поведение варьируется от версии к версии Android. Например, в ICS window.open() открывает ссылки в браузере Android, но эмулятор 2.3 открывает такие ссылки в WebView.
Что определяет, открывается ли ссылка в браузере Android или в WebView?
Что я нашел до сих пор:
Вещи, которые shouldOverrideUrlLoading
метод shouldOverrideUrlLoading
, запустит внешний браузер, если:
sms:
tel:
geo:
mailto:
Но метод shouldOverrideUrlLoading
не всегда запускается - на Android 2.2 и предыдущие (и, возможно, 2,3?) Методы Javascript для запуска загрузки страницы (например, window.open()
или document.location.href=
) не запускают метод, и, следовательно, загружать в WebView независимо.
Ссылки, физически щелкнутые пользователем, похоже, всегда запускают метод. Использование механизма событий JS для запуска события клика по ссылке может также работать, я не пробовал.
WebViewClient
запускает намерениеandroid.intent.action.VIEW
для URI, если он не включен в белый список. Который запускает внешний браузер. (Есть также несколько встроенных схем, которые запускают намерения, напримерmailto:
geo:
sms:
которые запускают другие соответствующие события)