我有一个webview。一切都运行正常,但当我打开一个有iframe的页面时,iframe不可见。是否需要任何特定设置?
答案 0 :(得分:1)
首先添加Hardware Acceleration并将以下行添加到您的webView
webView.setWebChromeClient(new WebChromeClient());
编辑1
很难确定问题,但尝试添加WebChromeClient
,WebViewClient
,也不要忘记在加载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 :(得分:0)
你能检查一下吗
android:hardwareAccelerated="true"
在您的AndroidManifest文件中,该活动的<application>
标记。
答案 2 :(得分:0)
以下hack为我在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);}
}
}
另外,请不要忘记在清单文件中添加Internet权限。
<uses-permission android:name="android.permission.INTERNET" />
答案 3 :(得分:0)
这可能为时已晚! 我希望它能对某人有所帮助。
只需尝试为您的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);
答案 4 :(得分:0)
如果您修改WebView配置并使用loadData函数加载iframe,则某些iframe在Webview中将无法使用。因此,对于该解决方案,我已经实现了 AdvancedWebView 库。
https://github.com/delight-im/Android-AdvancedWebView
在此网络视图中使用loadHtml(URL)方法,您可以在参数中传递URL,然后就可以在网络视图中查看iframe。