1

「www.google.com」など、WebView をロードする小さなプログラムを作成します。次のように、バーコードをスキャンした後、ユーザーが入力せずに自動検索を開始しようとしました。

final String scanedCode = "123456";
runOnUiThread(new Runnable() {
    @Override
    public void run() {
        dispatchKeyEvent(new KeyEvent(100, scanedCode, 1, 0));
        dispatchKeyEvent(new KeyEvent(KeyEvent.ACTION_DOWN, KeyEvent.KEYCODE_ENTER));
    }
);

Google 検索フィールドに「123456」という数字が表示されますが、ENTER というか自動検索は開始されません。

多くの方法を試し、ここで検索しましたが、まだこれらの単純なものを取得できません。誰かが私にいくつかのヒントを教えてもらえますか?

4

1 に答える 1

2

より堅牢なアプローチは、独自の JavaScript コードを WebView に直接挿入することです。このインジェクションは、どの URL が内部にロードされているかを気にしないため、任意のサイトに対して行うことができます。

大きなセキュリティ ホールのように聞こえますが、実際にはそうではありません。ブラウザはアプリの中にあります。つまり、あなたがブラウザであるため、表示している Web サイトの HTML コードを解析しながら、やりたいことが何でもできます。

これは、いくつかの JS を Google がホストするページにロードするコード例です。

final WebView webview = (WebView)findViewById(R.id.browser);  
/* JavaScript must be enabled if you want it to work, obviously */  
webview.getSettings().setJavaScriptEnabled(true);  

/* WebViewClient must be set BEFORE calling loadUrl! */  
webview.setWebViewClient(new WebViewClient() {  
   @Override  
   public void onPageFinished(WebView view, String url)  
   {  
       webview.loadUrl("javascript:(function() { " +  
            "document.getElementsByTagName('body')[0].style.color = 'red'; " +  
            "})()");  
   }  
});  

 webview.loadUrl("http://code.google.com/android");  

独自の JS を実行できる場合は、DOM を直接トラバースしたり、検索ボックス自体にアクセスしたり、フォーカスがあることを確認したりするなど、ほとんど何でもできます。

挿入する JS コードを特定するには、PC で Google Chrome を使用し、Chrome デベロッパー ツール内で google.com を開きます。次に、必要な結果が得られるまで、コンソールに JS コマンドを入力してみてください。コンソールに JS 行を入力する = JS コードをページに挿入します。

于 2013-07-21T13:54:56.013 に答える