Подтвердить что ты не робот

WebView на Android ICS, проблемы iframe с android_assets

Мое приложение работает внутри WebView. Он охватывает разные IFRAMES. И основное приложение html, и iframes html находятся на android_assets. На Android 3.x проблем нет. То же самое в браузере Chrome и т.д.

Если я создаю IFRAME (createElement → appendChild), создается iframe.

Когда я загружаю в него вещи (iframe.src= "url" < > iframe.contentWindow.location.href= "url" )... IT ЗАМЕНЯЕТ ОСНОВНОЕ ПРИМЕНЕНИЕ!! (вместо загрузки в iframe)

Уже пробовал:

  • window.setTimeout для задержки загрузки... не удалось.
  • в webview, введите X-Frame-Options = SAME_ORIGIN как заголовок на любую загруженную страницу → сбой
  • создание iframe, установка sandbox = same_origin, allow_scripts → failed

Кто-нибудь со схожими проблемами? Или может кто-нибудь помочь мне найти документацию об ошибках ICS WebView против Honeycomb?

Также найдено много других странных проблем... ICS действительно эта ошибка?: S: S

4b9b3361

Ответ 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