Javascript 如何在AndroidWebView中捕获元素按ID单击?
我有一个viewPager组件,它包含来自远程服务器的几个带有HTML内容的Web视图 它是简单的HTML代码,不可能在服务器端更改HTML输出 我想问一下,在Android中,如何捕获具有给定ID的指定元素上的click(tap)事件 ViewPagerJavascript 如何在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
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);
//...
}