37

アプリケーション エンジンは WebView 内で実行されます。異なる IFRAME にまたがっています。メイン アプリケーション html と iframes html の両方が android_assets にあります。Android 3.x では問題ありません。Chromeブラウザなどでも同じです。

IFRAME (createElement -> appendChild) を作成すると、iframe が作成されます。

その中に何かをロードすると (iframe.src="url" <> iframe.contentWindow.location.href="url") ... メインアプリケーションを置き換えます!! (iframe に読み込む代わりに)

すでに試しました:

  • 読み込みを遅らせるwindow.setTimeout...失敗しました。
  • WebView で、読み込まれたページにヘッダーとして X-Frame-Options=SAME_ORIGIN を挿入します -> 失敗しました
  • iframe の作成、sandbox=same_origin,allow_scripts の設定 -> 失敗

同様の問題を抱えている人はいますか?または、誰かが WebView ICS のバグと Honeycomb に関するドキュメントを見つけるのを手伝ってくれますか?

また、他にも多くの奇妙な問題が見つかりました... ICS は本当にこれほどバグがあるのでしょうか? :S:S

4

1 に答える 1

2

Android Ice Cream Sandwich (4.0.3) で Phonegap (Apache Cordova) と IFrames を使用すると、同じ問題が発生しました。

この問題を解決するには、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 内にページを読み込もうとすると、ICS の Android WebView がそれを新しいページ要求として解釈し、それがメイン アプリケーションに取って代わるようです!! 、つまり、要求されたページをホールの親ウィンドウで開きます。

残りのコードはそのままにしました。

私と同じように、それが役立つことを願っています。

よろしくお願いします。

アレクサンドル・アルメイダ

于 2012-04-18T13:15:52.563 に答える