WebView на Android ICS, проблемы iframe с android_assets - PullRequest
37 голосов
/ 29 января 2012

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

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

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

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

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

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

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

1 Ответ

2 голосов
/ 18 апреля 2012

Господа, у меня была такая же проблема при использовании 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 REPLACESОСНОВНОЕ ПРИЛОЖЕНИЕ !! , или, другими словами, оно ОТКРЫВАЕТ запрошенную страницу в родительском окне дыры.

Я оставил остальную часть кода без изменений.

Надеюсь, это поможет, как и для меня.

С уважением.

Александр Алмейда

...