讓我給你提供一個完整的例子。 爲了您的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',來源: –