让我给你提供一个完整的例子。 为了您的http://store.nike.com/ch/de_de/pd/mercurial-superfly-v-tech-craft-2-herren-fussballschuh-fur-normalen-rasen/pid-11229711/pgid-11626158
{
...
webview.getSettings().setJavaScriptEnabled(true);
webview.getSettings().setDomStorageEnabled(true);
webview.addJavascriptInterface(new MyJavaScriptInterface(this), "ButtonRecognizer");
webview.setWebViewClient(new WebViewClient() {
@Override
public void onPageFinished(WebView view, String url) {
loadEvent(clickListener());
}
private void loadEvent(String javascript){
webview.loadUrl("javascript:"+javascript);
}
private String clickListener(){
return getButtons()+ "for(var i = 0; i < buttons.length; i++){\n" +
"\tbuttons[i].onclick = function(){ console.log('click worked.'); ButtonRecognizer.boundMethod('button clicked'); };\n" +
"}";
}
private String getButtons(){
return "var buttons = document.getElementsByClassName('add-to-cart'); console.log(buttons.length + ' buttons');\n";
}
});
webview.loadUrl("http://store.nike.com/ch/de_de/pd/mercurial-superfly-v-tech-cra\u200C\u200Bft-2-herren-fussballschuh-fur-normalen-rasen/pid-11229711/pgid-11626158");
...
}
class MyJavaScriptInterface {
private Context ctx;
MyJavaScriptInterface(Context ctx) {
this.ctx = ctx;
}
@JavascriptInterface
public void boundMethod(String html) {
new AlertDialog.Builder(ctx).setTitle("HTML").setMessage("It worked")
.setPositiveButton(android.R.string.ok, null).setCancelable(false).create().show();
}
}
这特定的网站会为按钮改变的onClick到你所需要的。
对于其他人来说,它看起来像是getElementById()或Android问题的页面特定问题,但按类(getElementsByClassName())获取元素的方式按预期工作。 此外,可能有必要用getElementsByName()替换getElementsByClassName(),例如在本网站上:https://www.digitec.ch/de/s1/product/lexon-flip-wecker-3522142。 如果你会把getElementsByName(“AddProductToCart”)
信息:\ n和该clickListener方法内部串的怪异组合这样设置,因为IDE的。 (“;”在字符串内部导致问题)。
感谢您的回答。但它似乎没有工作。我实现它的方式如下:webView.addJavascriptInterface(新的对象(){ 公共 无效performClick(){ Toast.makeText(getApplicationContext(), “结帐!”,Toast.LENGTH_LONG).show();} },“myBoundJavascriptMethod”); –
此外,我启用了JavaScript,并相应地设置了整个视图。我将元素ID更改为buyingtools-add-to-cart-button。顺便说一句,我把http://store.nike.com/ch/de_de/pd/mercurial-superfly-v-tech-craft-2-herren-fussballschuh-fur-normalen-rasen/pid-11229711/pgid-11626158例如试一试。 –
哦,这是我得到的错误:I /铬:[INFO:CONSOLE(1)]“未捕获TypeError:无法读取null的属性'addEventListener',来源: –