0

此链接: http: //lexandera.com/category/webview_examples/ 表示您可以将 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 函数与页面上发生的任何关键事件挂钩。

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

我是否误解了这一切如何协同工作?

就这样,我没有试图破解某些东西,这一切的重点是为我的雇主创建的要在 Android WebView 中呈现的网页提供自定义 javascript 响应。

4

1 回答 1

0

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

    }           
});
于 2012-10-10T22:10:23.077 回答