如何在 Android webview 中通过 ID 捕捉元素点击?
How to catch element click by ID in Android webview?
我有 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 中?)我不能使用类似的东西:
Detect click on HTML button through javascript in Android WebView.
我想要这样的东西:
- 在 HTML 代码中查找给定元素
- 更新 HTML 代码(添加
onclick 事件)
- 在本机代码中捕获此事件
为此你需要解析 html,html Java(因此也是 Android)的一个好的 html 解析器是 Jsoup。 =12=]
您可以这样做:
// 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.
// 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日志。
我有 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 中?)我不能使用类似的东西:
Detect click on HTML button through javascript in Android WebView.
我想要这样的东西:
- 在 HTML 代码中查找给定元素
- 更新 HTML 代码(添加 onclick 事件)
- 在本机代码中捕获此事件
为此你需要解析 html,html Java(因此也是 Android)的一个好的 html 解析器是 Jsoup。 =12=]
您可以这样做:
// 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.
// 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日志。