Javascript 如何在AndroidWebView中捕获元素按ID单击?

Javascript 如何在AndroidWebView中捕获元素按ID单击?,javascript,android,html,android-webview,dom-events,Javascript,Android,Html,Android Webview,Dom Events,我有一个viewPager组件,它包含来自远程服务器的几个带有HTML内容的Web视图 它是简单的HTML代码,不可能在服务器端更改HTML输出 我想问一下,在Android中,如何捕获具有给定ID的指定元素上的click(tap)事件 ViewPager private void initViewPager() { pager = (ViewPager) findViewById(R.id.my_pager); adapter = new FragmentSta

我有一个viewPager组件,它包含来自远程服务器的几个带有HTML内容的Web视图

它是简单的HTML代码,不可能在服务器端更改HTML输出

我想问一下,在Android中,如何捕获具有给定ID的指定元素上的click(tap)事件

ViewPager

private void initViewPager() {
        pager = (ViewPager) findViewById(R.id.my_pager);
        adapter = new FragmentStatePagerAdapter(
                getSupportFragmentManager()
        ) {
            @Override
            public int getCount() {
                // This makes sure getItem doesn't use a position
                // that is out of bounds of our array of URLs
                Logger.d(String.valueOf(mWelcomeController.loadedPagesToDisplay.size()));
                return mWelcomeController.loadedPagesToDisplay.size();
            }

            @Override
            public android.support.v4.app.Fragment getItem(int position) {
                Logger.d(mWelcomeController.loadedPagesToDisplay.toString());
                return BrowserFragment.newInstance(
                        mWelcomeController.loadedPagesToDisplay.get(position)
                );
            }
        };

        //Let the pager know which adapter it is supposed to use
        pager.setAdapter(adapter);
    }
因为我不能在服务器端修改HTML输出(可能会在设备上的DOM中注入一些属性?),所以我不能使用这样的东西:

我想要这样的东西:

  • 在HTML代码中查找给定元素
  • 更新HTML代码(添加 onclick事件)
  • 在本机代码中捕获此事件

    • 对于您需要解析html的问题,一个好的Java(以及Android)html解析器是非常有用的

      您可以执行以下操作:

      // Connect to the web site
      Document doc = Jsoup.connect(url).get();
      Element button = doc.select("#buttonid");
      button.html("new stuff here");
      //parse back and put in webview
      String finaloutput = doc.html();
      
      一,

      二,

      三,

      四,

      那么,看看2号日志

      // setting
      wv.addJavascriptInterface(new MyJsToAndroid(),"my");
      WebSettings settings = wv.getSettings();
      settings.setJavaScriptEnabled(true);
      
      // JsCallBack
      class MyJsToAndroid extends Object{
          @JavascriptInterface
          public void myClick(String idOrClass) {
              Log.d(TAG, "myClick-> " + idOrClass);
          }
      }
      
      // JS--
          public static String addMyClickCallBackJs() {
              String js = "javascript:";
              js += "function myClick(event){" +
                      "if(event.target.className == null){my.myClick(event.target.id)}" +
                      "else{my.myClick(event.target.className)}}";
              js += "document.addEventListener(\"click\",myClick,true);";
              return js;
          }
      
      @Override
      public void onPageFinished(WebView wv, String url) {
      //...
          wv.evaluateJavascript(addMyClickCallBackJs(),null);
      //...
      }