Javascript 在Android Webview中,我是否能够修改网页';多姆?

Javascript 在Android Webview中,我是否能够修改网页';多姆?,javascript,android,templates,webview,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 Hel

假设我通过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");         
    }

我是否可以在这个网络视图中插入一些东西,用我自己的徽标替换易趣徽标?

不可以直接插入。您可以通过
loadUrl()
在当前网页的上下文中调用Javascript代码,就像bookmarklet一样。但是,您不能从Java代码直接访问DOM。

要扩展Commonware的正确答案:

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]'");       
    }
}

简而言之,您需要等待页面加载。然后你加载URL(“javascript:[你的javascript在这里]”)。

用你自己的徽标替换别人的徽标听起来是一个非常糟糕的主意。这只是webview可以做和不能做的一个例子。实际上,我想删除第三方网站Linkedin的所有标签(因为该网站有一个bug)。这是policyOverflow还是Stackoverflow?这里的问题也是一样的:是的,你可以这样做。比如我的这个问题,因为我也在做类似的事情。请记住,这样做可能违反您显示页面的服务条款和条件。在最好的情况下,这将是一个灰色区域,但我同意你,有些网站有时只是打破,你的用户将欣赏“修复”。尽管直接访问部分是正确的,但对Dom有完全的间接访问,使用javaScriptBridge只需传递完整的Html,就可以访问整个页面。然后可以通过字符串操作以任何方式修改此页面并重新加载回webview。这与问题无关。请确保在webview上将javascript enabled设置为true,否则您将浪费大量时间尝试像我一样调试此页面。为什么需要重写shouldOverrideUrlLoading?我不需要
shouldOverrideUrlLoading
而不是
view.loadUrl
看起来你需要
view.evaluateJavascript(“document.forms[0].q.value='[android]',null)
基于这个答案,我想出了以下方法,展示了如何戳DOM来初始化表单上的字段。-谢谢你给了我一个很好的答案。
WebView webview = new WebView();

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

webview.setWebViewClient(new WebClient());

webview.loadUrl("stackoverflow.com");