在 Android Webview 中,我可以修改网页的 DOM 吗?

IT技术 javascript android templates webview
2021-02-08 16:48:43

假设我通过 webview 加载了一个 3rd 方 URL。

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        webview = (WebView) findViewById(R.id.webview);
        webview.setWebViewClient(new HelloWebViewClient());
        webview.getSettings().setJavaScriptEnabled(true);
        webview.setWebChromeClient(new MyWebChromeClient());
        webview.loadUrl("http://ebay.com");         
    }

我可以在这个 WebView 中注入一些东西来用我自己的标志替换 ebay 标志吗?

3个回答

要扩展 CommonsWare 的正确答案:

WebView webview = new WebView();
webview.setWebViewClient(new WebClient());
webView.getSettings().setJavaScriptEnabled(true);
webview.loadUrl("stackoverflow.com");

然后在 WebClient 中:

public class WebClient extends WebViewClient {
    @Override
    public boolean shouldOverrideUrlLoading(WebView view, String url) {
        view.loadUrl(url);
        return true;
    }

    @Override
    public void onPageFinished(WebView view, String url) 
    {       
        // Obvious next step is: document.forms[0].submit()
        view.loadUrl("javascript:document.forms[0].q.value='[android]'");       
    }
}

简而言之,您等待页面加载。然后你 loadUrl("javascript:[your javascript here]")。

为什么需要覆盖 shouldOverrideUrlLoading?
2021-03-15 16:48:43
我不需要shouldOverrideUrlLoading和而不是view.loadUrl看起来像你需要view.evaluateJavascript("document.forms[0].q.value='[android]'", null)
2021-03-19 16:48:43
确保您在 webview 上将 javascript enabled 设置为 true ,否则您将浪费大量时间尝试像我一样调试它。
2021-03-30 16:48:43
基于这个答案,我想出了以下内容,它展示了如何使用 DOM 来初始化表单上的字段。github.com/slogan621/tscharts-register/blob/master/app/src/main/... - 感谢让我开始的好答案。
2021-04-01 16:48:43

不直接。您可以通过loadUrl()在当前网页的上下文中调用 Javascript 代码,就像书签所做的那样。但是,您无法从 Java 代码直接访问 DOM。

尽管直接访问部分是正确的,但可以完全间接访问 Dom,但使用 javaScriptBridge 只需传递完整的 Html 即可获得整个页面。然后可以通过字符串操作以任何方式修改此页面并重新加载回 webview。
2021-03-26 16:48:43
WebView webview = new WebView();

//Maybe need to set to enabled javascript?
webView.getSettings().setJavaScriptEnabled(true);

webview.setWebViewClient(new WebClient());

webview.loadUrl("stackoverflow.com");
这与问题无关。
2021-03-30 16:48:43