Android WebView和javascript

Android WebView和javascript,android,Android,此链接:表示可以将javascript注入到由WebView呈现的网页中,如下所示: webview.setWebViewClient(new WebViewClient() { @Override public void onPageFinished(WebView view, String url) { webview.loadUrl("javascript:(function() { " + "document.getElem

此链接:表示可以将javascript注入到由WebView呈现的网页中,如下所示:

webview.setWebViewClient(new WebViewClient() {  
  @Override  
  public void onPageFinished(WebView view, String url)  
  {  
    webview.loadUrl("javascript:(function() { " +  
            "document.getElementsByTagName('body')[0].style.color = 'red'; " +  
            "})()");  
  }  
}); 
我想进一步注入一个在按键时执行的函数

我正在使用:

    webView.setWebViewClient(new WebViewClient(){   

        @Override  
        public void onPageFinished(WebView view, String url)  
        {  

            webView.loadUrl("javascript:function keyHandler(e) { " +  
               "document.getElementsByTagName('body')[0].style.color = 'red'; " +  
                       "}");                

        }           
    });
页面已经编写好,包含document.onkeypress=keyHandler,AFAIK应该将我的keyHandler函数与页面上发生的任何键事件连接起来

问题是,它不起作用。我希望它在按键时将文本更改为红色。相反,在我按下任何键之前,页面被呈现,文本变为红色

我是不是误解了这一切是如何协同工作的

正因为如此,我没有试图破解任何东西,我的目的是为我的雇主创建的网页提供自定义javascript响应,以便在Android WebView中呈现。

使用
loadUrl()
执行javascript,而不是将其添加到文档中。您在执行的脚本中必须执行的操作类似于

webView.setWebViewClient(new WebViewClient(){   

    @Override  
    public void onPageFinished(WebView view, String url)  
    {  

        webview.loadUrl("javascript:function() { " +  
           "var script = document.createElement('script'); " +
           "script.innerHTML = 'function keyHandler(e) { document.getElementsByTagName('body')[0].style.color = 'red'; }'" +
           "document.getElementsByTagName('head')[0].appendChild(script); " +
        "}");                

    }           
});

我不明白……你是说我必须:将你发布的代码添加到网页,在webView.loadUrl()中定义[]之间的内容,然后网页将自动调用我的javascript?你想做的是动态地将函数keyHandler(e)添加到文档中,对吗?这意味着您必须使用loadUrl()调用一个javascript函数,该函数正是这样做的。看我修改过的答案。顺便说一句:我还没有测试过,这只是给你一个想法,所以如果你复制并通过它,它不会马上运行,请不要向我开枪。谢谢你的澄清。我想我明白了。我想我所要做的就是在loadUrl()中定义脚本。但实际上,我必须定义它并将其附加到页面上。这是正确的解释吗?我意识到这个片段没有任何保证。我很高兴能把这件事讲出来,举个例子就是一个奖励。