如何在Android webview中通过ID捕获元素点击?

时间:2015-09-21 15:11:47

标签: javascript android html javascript-events webview

我有viewPager compoent,它包含来自远程服务器的HTML内容的几个webview。

是否简单的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中注入一些属性?)我不能使用类似的东西:

http://www.scriptscoop.com/t/21b53b896c9e/javascript-how-to-detect-button-click-in-webview-android.html

Detect click on HTML button through javascript in Android WebView

我想这样的事情:

  • 在HTML代码中找到给定元素
  • 更新HTML代码(添加 onlick事件)
  • 以原生代码
  • 抓住此事件

非常感谢任何建议。

2 个答案:

答案 0 :(得分:2)

为此您需要解析html,一个优秀的Java HTML解析器(以及Android)也是Jsoup

您可以执行以下操作:

// 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();

答案 1 :(得分:0)

1

// setting
wv.addJavascriptInterface(new MyJsToAndroid(),"my");
WebSettings settings = wv.getSettings();
settings.setJavaScriptEnabled(true);

2

// JsCallBack
class MyJsToAndroid extends Object{
    @JavascriptInterface
    public void myClick(String idOrClass) {
        Log.d(TAG, "myClick-> " + idOrClass);
    }
}

3

// 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;
    }

4

@Override
public void onPageFinished(WebView wv, String url) {
//...
    wv.evaluateJavascript(addMyClickCallBackJs(),null);
//...
}

所以,看看2日志。