我需要在Android WebView中修改页面DOM(使用id或classname隐藏一些元素,并替换函数或CSS样式的一些默认impls)。我试图在WebViewClient.onPageLoaded
中注入javascript:
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
getSupportActionBar().setTitle("Finishing ");
getSupportActionBar().setSubtitle(url);
view.loadUrl("javascript:alert('hello world 2');");
getSupportActionBar().setTitle("Finished");
}
});
(通过js显示警报,而不是实际隐藏)。这不是实际需要的,因为所有页面都在未加载时显示。
由于某种原因,onPageStarted
中的js加载不起作用 - 它阻止加载原始网址:
webView.setWebViewClient(new WebViewClient() {
@Override
public void onPageStarted(WebView view, String url, Bitmap favicon) {
getSupportActionBar().setTitle("Started ");
getSupportActionBar().setSubtitle(url);
webView.evaluateJavascript("alert('hello world 1');", null);
// view.loadUrl("javascript:alert('hello world 1');") prevents too
}
是否可以在页面开始加载之前注入JS ?在WebView
?
答案 0 :(得分:1)
我解决了这样的问题,但我在onPageFinished
方法中解决了这个问题。
您可以在DOM操作之前隐藏webview。因此,用户不会受到影响。
public class WebClient extends WebViewClient {
...
@Override
public void onPageFinished(WebView view, String url) {
view.loadUrl("javascript:document.getElementById(\"jumbotron-test\").innerHTML = \"\";void(0);");
webView.setVisibility(View.VISIBLE);
}
}
答案 1 :(得分:0)
你不能在侧面加载之前在DOM中注入JS,因为DOM 是渲染的&加载网站。
您可以尝试使用HttpClient httpclient = new DefaultHttpClient();
和BufferedReader
获取网页的源代码,并将其传递到string
。之后,您可以修改该字符串并在script
- 正文字符串的主体中插入新的html
标记:
<script>
alert("Hey, whats up?");
</script>
现在你的webview可以加载字符串:
webView.loadData(yourHtmlString, "text/html; charset=utf-8", "UTF-8");
它应该加载alert-popup。