Android ICS 上的 WebView、android_assets 的 iframe 问题

发布于 2024-12-29 08:07:24 字数 639 浏览 3 评论 0原文

我的应用程序引擎在 WebView 内运行。它跨越不同的 IFRAMES。 主应用程序 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 bug 与 Honeycomb 的文档吗?

还发现了许多其他奇怪的问题...ICS真的有这么bug吗? :S :S

My application engine runs inside a WebView. It spans different IFRAMES.
Both the main application html and the iframes html are on android_assets.
On Android 3.x no problems ever. Same on chrome browser, etc.

If I create an IFRAME (createElement -> appendChild) the iframe is created.

When I load stuff in it (iframe.src="url" <> iframe.contentWindow.location.href="url") ... IT REPLACES THE MAIN APPLICATION!! (instead of loading into iframe)

Already tried:

  • window.setTimeout to delay the loading... failed.
  • in webview, inject X-Frame-Options=SAME_ORIGIN as header into any loaded page -> failed
  • creating the iframe, setting sandbox=same_origin,allow_scripts -> failed

Anybody with similar problems? Or can someone help me find documentation about WebView ICS bugs vs Honeycomb?

Also found many other strange issues... is ICS really this buggy? :S :S

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

禾厶谷欠 2025-01-05 08:07:24

先生们,我在 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 会将其解释为新页面请求,并且它取代了主应用程序!,或者在其他情况下换句话说,它在洞父窗口中打开请求的页面。

我保留了其余代码不变。

我希望它能有所帮助,就像它对我一样。

此致。

亚历山大·阿尔梅达

Sirs, I had the same problem when using Phonegap (Apache Cordova) and IFrames in Android Ice Cream Sandwich (4.0.3).

To solve this problem, I had to edit Apache Cordova Source Code. I changed the org.apache.cordova.CordovaWebViewClient.java file, and commented this part of the code, and included the last line (return false;).

So it now looks like this:

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

This problem only happens on Android ICS, but I changed the code for all my apps. I'm still doing tests.

In my analysis, it seems that when you try to load a page inside a iFrame, the Android WebView on ICS interprets it as a new page request, and IT REPLACES THE MAIN APPLICATION!!, or in other words, it OPENS the requested page in the hole parent window.

I left the rest of the code untouched.

I hope it helps, like it did for me.

Best regards.

Alexandre Almeida

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文