Javascript 如何在Android WebView中修改DOM?
我需要修改Android WebView中的DOM页面(使用id或classname隐藏一些元素,并替换一些函数或CSS样式的默认impl)。我已尝试在Javascript 如何在Android WebView中修改DOM?,javascript,android,webview,Javascript,Android,Webview,我需要修改Android WebView中的DOM页面(使用id或classname隐藏一些元素,并替换一些函数或CSS样式的默认impl)。我已尝试在WebViewClient.onPageLoaded中插入javascript: webView.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { getSu
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发出的警报,而不是实际隐藏)。这并不是我们想要的,因为所有页面都是在未加载时显示的 由于某些原因,js在
onPageStarted
中加载不起作用-它会阻止加载原始URL:
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
中回调DOM事件的任何技巧?在加载端之前,不能在DOM中注入JS,因为DOM是呈现和加载的网站
您可以尝试使用HttpClient-HttpClient=newdefaulthttpclient()获取网页的源代码
和一个BufferedReader
并以字符串传递它。之后,您可以修改该字符串,并在html
-字符串的主体中插入一个新的script
标记:
<script>
alert("Hey, whats up?");
</script>
它应该加载警报弹出窗口。我解决了这样一个问题,但我在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);
}
}
这可能是解决方案,但有时由于原始页面的脚本而不起作用。为了使它正确,我需要解析html并制作脚本链,以使我的脚本和原始页面的脚本运行,这是相当困难的。顺便说一句,实际的目的不是隐藏元素,而是创建包装或修改css以使元素不可见“这实际上不是我们想要的,因为所有页面都是在未加载时显示的。”
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);
}
}