【问题标题】:android webview automatic send enter key on google siteandroid webview在谷歌网站上自动发送回车键
【发布时间】:2013-07-20 04:03:34
【问题描述】:

有一个加载 WebView 的小程序,例如“www.google.com”。在扫描条形码后,我尝试在不按用户 ENTER 的情况下开始自动搜索,如下所示:

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”将显示在谷歌搜索字段中,但 ENTER,或者更确切地说,自动搜索没有启动。

尝试了很多方法并在这里搜索,但我仍然无法得到这些简单的东西。有人能给我一些建议吗?

【问题讨论】:

  • 可以在 WebView 中以编程方式运行您自己的 JS 代码。我认为 JS 会是一种更健壮的方法,您还可以在发送密钥之前确保正确的组件具有焦点
  • 我可以将JS嵌入到谷歌网站吗?
  • 由于你是直接将JS嵌入到WebView中,它不会关心当前加载的是哪个URL

标签: android webview enter


【解决方案1】:

更强大的方法是将您自己的 javascript 代码直接注入 WebView。这种注入并不关心里面加载的是哪个 URL,所以你可以对任何站点进行。

这听起来像是一个很大的安全漏洞,但事实并非如此。浏览器在您的应用程序中,这意味着 是浏览器,因此您可以在解析所显示网站的 HTML 代码时做任何您想做的事情。

这是一个将一些 JS 加载到谷歌托管页面的代码示例:

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 代码注入页面。

【讨论】:

  • 非常感谢您的详细回答。我用类似 myWebview.loadUrl("javascript:(function() { document.getElementById('tsbb').click()})()");
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多