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

TIM*_*MEX 37 javascript android templates webview

假设我通过webview加载第三方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");         
    }
Run Code Online (Sandbox Code Playgroud)

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

Car*_*don 41

扩展CommonsWare的正确答案:

WebView webview = new WebView();
webview.setWebViewClient(new WebClient());
webView.getSettings().setJavaScriptEnabled(true);
webview.loadUrl("stackoverflow.com");
Run Code Online (Sandbox Code Playgroud)

然后在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]'");       
    }
}
Run Code Online (Sandbox Code Playgroud)

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

  • 确保在Webview上将javascript设置为true,否则像我一样会花很多时间尝试调试。 (2认同)

Com*_*are 12

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