有一个带有WebView加载的小程序,例如“www.google.com”。在扫描条形码后,我尝试在没有用户输入的情况下开始自动搜索,如下所示:
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));
}
);
数字“123456”将显示在Google搜索字段中,但是ENTER,或者说自动搜索未启动。
尝试了很多方法并在这里搜索,但我仍然无法得到这些简单的东西。有人可以给我一些提示吗?
答案 0 :(得分:2)
更强大的方法是将您自己的javascript代码直接注入WebView。此注入不关心在哪个URL中加载,因此您可以对任何站点执行此操作。
这听起来像是一个很大的安全漏洞,但事实并非如此。浏览器位于您的应用内部,这意味着您是浏览器,因此您可以在解析您正在展示的网站的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代码注入页面。