Ответ 1
Сэр, у меня была такая же проблема при использовании Phonegap (Apache Cordova) и IFrames в Android Ice Cream Sandwich (4.0.3).
Чтобы решить эту проблему, мне пришлось изменить исходный код Apache Cordova. Я изменил файл org.apache.cordova. CordovaWebViewClient.java и прокомментировал эту часть кода и включил последнюю строку (return false;).
Итак, теперь он выглядит так:
// All else
// else {
//
// // If our app or file:, then load into a new Cordova webview container by starting a new instance of our activity.
// // Our app continues to run. When BACK is pressed, our app is redisplayed.
// if (url.startsWith("file://") || url.indexOf(this.ctx.baseUrl) == 0 || ctx.isUrlWhiteListed(url)) {
// this.ctx.loadUrl(url);
// }
//
// // If not our application, let default viewer handle
// else {
// try {
// Intent intent = new Intent(Intent.ACTION_VIEW);
// intent.setData(Uri.parse(url));
// ctx.startActivity(intent);
// } catch (android.content.ActivityNotFoundException e) {
// LOG.e(TAG, "Error loading url "+url, e);
// }
// }
// }
// return true;
return false;
Эта проблема возникает только в Android ICS, но я изменил код для всех моих приложений. Я все еще делаю тесты.
В моем анализе кажется, что когда вы пытаетесь загрузить страницу внутри iFrame, Android WebView на ICS интерпретирует ее как новый запрос страницы, а IT ЗАМЕНЯЕТ ОСНОВНОЕ ПРИМЕНЕНИЕ!!, или, другими словами, он ОТКРЫВАЕТ запрошенную страницу в окне родительского отверстия.
Я оставил остальную часть кода нетронутой.
Я надеюсь, что это поможет, как и для меня.
С уважением.
Alexandre Almeida