WebView su ICS Android, problemi iframe con android_assets



webview configuration android (1)

Signori, ho avuto lo stesso problema usando Phonegap (Apache Cordova) e IFrames in Android Ice Cream Sandwich (4.0.3).

Per risolvere questo problema, ho dovuto modificare il codice sorgente di Apache Cordova. Ho cambiato l'org.apache.cordova. CordovaWebViewClient.java file e ha commentato questa parte del codice e ha incluso l'ultima riga ( return false; ).

Quindi ora sembra così:

    // 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;

Questo problema si verifica solo su Android ICS, ma ho modificato il codice per tutte le mie app. Sto ancora facendo i test.

Nella mia analisi, sembra che quando si tenta di caricare una pagina all'interno di un iFrame, Android WebView su ICS lo interpreti come una nuova richiesta di pagina e IT SOSTITUISCE L'APPLICAZIONE PRINCIPALE !! , o in altre parole, APRE la pagina richiesta nella finestra genitore del foro.

Ho lasciato il resto del codice intatto.

Spero che aiuti, come ha fatto per me.

I migliori saluti.

Alexandre Almeida

Il mio motore di applicazione gira all'interno di una WebView. Si estende su diversi IFRAMES. Sia l'html dell'applicazione principale che l'iframe html si trovano su android_assets. Su Android 3.x non ci sono mai problemi. Lo stesso con il browser Chrome, ecc.

Se creo un IFRAME (createElement -> appendChild) viene creato l'iframe.

Quando carico cose (iframe.src = "url" <> iframe.contentWindow.location.href = "url") ... SOSTITUISCE L'APPLICAZIONE PRINCIPALE !! (invece di caricare in iframe)

Già provato

  • window.setTimeout per ritardare il caricamento ... non riuscito.
  • in webview, iniettare X-Frame-Options = SAME_ORIGIN come intestazione in qualsiasi pagina caricata -> fallita
  • creando l'iframe, impostando sandbox = same_origin, allow_scripts -> fallito

Qualcuno con problemi simili? Oppure qualcuno può aiutarmi a trovare documentazione sui bug di WebView ICS vs Honeycomb?

Inoltre ho trovato molti altri strani problemi ... ICS è davvero un buggy? : S: S





android-assets