0

このリンク: http://lexandera.com/category/webview_examples/ は、次のように WebView によってレンダリングされる Web ページに JavaScript を挿入できることを示しています。

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 が含まれています。これにより、私の知る限り、ページで発生するキーイベントで keyHandler 関数をフックする必要があります。

問題は、それが機能しないことです。キーが押されたときにテキストを赤く変更したい。代わりに、ページがレンダリングされ、キーを押す前にテキストが赤くなります。

これがどのように連携するかを誤解していますか?

そして、私が何かをハッキングしようとしているわけではありません。これの全体的なポイントは、私の雇用主が Android WebView でレンダリングするために作成した Web ページにカスタム JavaScript 応答を提供することです。

4

1 に答える 1

0

ドキュメントに追加するのではなく、JavaScriptをloadUrl()実行しています。実行しているスクリプトでしなければならなかったことは、次のようなものです

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 に答える