gpt4 book ai didi

javascript - 如何在 Android WebView 中修改 DOM?

转载 作者:行者123 更新时间:2023-11-30 01:02:31 26 4
gpt4 key购买 nike

我需要修改 Android WebView 中的页面 DOM(使用 id 或 classname 隐藏一些元素,并替换一些函数或 CSS 样式的默认实现)。我试图在 WebViewClient.onPageLoaded 中注入(inject) 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 不起作用 - 它阻止加载原始 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
}

是否可以在页面开始加载之前注入(inject) JS?在 WebView 中回调 DOM 事件有什么技巧吗?

最佳答案

我解决了这样的问题,但我在 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);

}
}

关于javascript - 如何在 Android WebView 中修改 DOM?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39244704/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com