在Android的Webview中,Iframe无法加载

10

我有一个WebView。一切工作正常,但是当我打开一个包含iframe的页面时,iframe不可见。是否需要特定的设置?


你启用了硬件加速吗? - Shree Krishna
不需要。这是必须的吗? - mohan mishra
增加了启用硬件加速所需的资源,因此尝试将其添加到 manifest 文件中的 activity 标签或应用程序标签中。 - Shree Krishna
3
为什么 iframe 依赖于硬件加速? - mohan mishra
6个回答

4

首先添加硬件加速,然后将下面的代码添加到你的webView中:

webView.setWebChromeClient(new WebChromeClient());

编辑1

虽然很难确定问题所在,但尝试添加WebChromeClientWebViewClient,并在加载URL之前不要忘记启用JavaScript,如下:

webView= (WebView) findViewById(R.id.webview); 
webView.setWebChromeClient(new WebChromeClient()); 
webView.setWebViewClient(new WebViewClient()); 
webView.getSettings().setJavaScriptEnabled(true);

编辑2

如果您确实需要加载iframe的内容,则可以尝试使用Jsoup来加载HTML页面,但您需要手动查找iframe并提取内容。

Document doc=...
Element iframe1 = doc.select("#iframe1").first();

if (iframe1!=null) {
   Document iframeContent = Jsoup.connect(iframe1.attr("src")).get();

  }

其中iframe1是您的iframe的ID。


1
为什么需要硬件加速? - mohan mishra
@mohanmishra,我看到许多标准浏览器和应用程序早在很久以前就开始使用硬件加速的2D图形了。主要好处只是额外的性能提升。这是值得推荐的。 - Shree Krishna
这个不起作用。我还能做些什么吗? - mohan mishra
@mohanmishra 是 YouTube 的 iframe 吗? - Shree Krishna
@mohanmishra 最好使用Jsoup。 请尝试我的第二次更新。 - Shree Krishna
显示剩余3条评论

2
这可能是一个晚了的答案!但我希望它能对某些人有所帮助。
尝试将桌面用户代理设置为您的Webview。
String DESKTOP_USER_AGENT = "Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/37.0.2049.0 Safari/537.36";
webView.getSettings().setUserAgentString(DESKTOP_USER_AGENT);

1
如果您修改了Webview配置并使用loadData函数加载iframe,则某些iframe在Webview中将无法工作。因此,为了解决这个问题,我实现了AdvancedWebView库。

https://github.com/delight-im/Android-AdvancedWebView

使用loadHtml(URL)方法与此Webview,并且您可以在参数中传递URL,这样您就可以在Webview中查看iframe。

0

以下的黑科技对我在Webview中加载iframe非常有效。希望还有人会发现它有用。

 String webContent="your data to be loaded in webview";

if(webContent.contains("iframe")){
                Matcher matcher = Pattern.compile("src=\"([^\"]+)\"").matcher(webContent);
                matcher.find();
                String src = matcher.group(1);
                webContent=src;

            try {
                URL myURL = new URL(src);
                webView.loadUrl(src);

            } catch (MalformedURLException e) {
                e.printStackTrace();
            }
        }else {

            webView.loadDataWithBaseURL(null, "<style>img{display: inline;height: auto;max-width: 100%;}</style>" + webContent, "text/html", "UTF-8", null);}

    }
}

同时不要忘记在你的清单文件中添加网络权限。

<uses-permission android:name="android.permission.INTERNET" />

0

你能检查一下你是否有

android:hardwareAccelerated="true"

在你的 AndroidManifest 文件中,在该活动的 <application> 标签中。

0
只有一件事对我有效,在Manifest中:
android:hardwareAccelerated="true"

在你的活动中:
webView.getSettings().setDomStorageEnabled(true);

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接