對(duì)于在webview中點(diǎn)擊其按鈕六荒,響應(yīng)點(diǎn)擊事件的問(wèn)題:
html文件:
function javacalljs(){
document.getElementById("content").innerHTML +=
"java調(diào)用了js函數(shù)";
}
function javacalljswithargs(arg){
document.getElementById("content").innerHTML +=
(""+arg);
}
this is my html
點(diǎn)擊調(diào)用java代碼
點(diǎn)擊調(diào)用java代碼并傳遞參數(shù)
內(nèi)容顯示
java代碼:
packagecom.myjs_demo_second;
importandroid.annotation.SuppressLint;
importandroid.app.Activity;
importandroid.os.Bundle;
importandroid.util.Log;
importandroid.view.View;
importandroid.view.View.OnClickListener;
importandroid.webkit.JavascriptInterface;
importandroid.webkit.WebView;
importandroid.widget.Button;
importandroid.widget.TextView;
importandroid.widget.Toast;
public classMainActivityextendsActivity {
privateWebViewcontentWebView=null;
privateTextViewmsgView=null;
//? ? @SuppressLint("SetJavaScriptEnabled")
@SuppressLint("JavascriptInterface")
@Override
public voidonCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
contentWebView= (WebView) findViewById(R.id.webview);
msgView= (TextView) findViewById(R.id.msg);
// 啟用javascript
contentWebView.getSettings().setJavaScriptEnabled(true);
contentWebView.addJavascriptInterface(newMyJSOnList(),"wst");
// 從assets目錄下面的加載html
contentWebView.loadUrl("file:///android_asset/wst.html");
Button button = (Button) findViewById(R.id.button);
button.setOnClickListener(btnClickListener);
//? ? ? ? contentWebView.addJavascriptInterface(this, "wst");
}
OnClickListenerbtnClickListener=newButton.OnClickListener() {
public voidonClick(View v) {
// 無(wú)參數(shù)調(diào)用
contentWebView.loadUrl("javascript:javacalljs()");
// 傳遞參數(shù)調(diào)用
contentWebView.loadUrl("javascript:javacalljswithargs("+"'hello world'"+")");
}
};
public classMyJSOnList {
@JavascriptInterface
public voidstartFunction() {
Log.e("TAG","http://///JS調(diào)用。恩袱。尿贫。净蚤。startFunction");
Toast.makeText(MainActivity.this,"js調(diào)用了java函數(shù)",Toast.LENGTH_SHORT).show();
runOnUiThread(newRunnable() {
@Override
public voidrun() {
msgView.setText(msgView.getText() +"\njs調(diào)用了java函數(shù)");
}
});
}
@JavascriptInterface
public voidstartFunction(finalString str) {
Log.e("TAG","http://///JS調(diào)用骨坑。。String。。startFunction");
Toast.makeText(MainActivity.this,str,Toast.LENGTH_SHORT).show();
runOnUiThread(newRunnable() {
@Override
public voidrun() {
msgView.setText(msgView.getText() +"\njs調(diào)用了java函數(shù)傳遞參數(shù):"+str);
}
});
}
}
}
在assets文件中有個(gè)本地的wst.html文件(可以用瀏覽器打開(kāi)拗引,安卓中用webview顯示)
注意:
html的點(diǎn)擊事件:
點(diǎn)擊調(diào)用java代碼
其中wst是js對(duì)象名;startFunction弧轧,是java代碼的點(diǎn)擊事件的方法,二者需要一一對(duì)應(yīng)球涛。
java:
contentWebView.addJavascriptInterface(new?MyJSOnList(),?"wst");
1)劣针、添加js交互接口類MyJSOnList,js對(duì)象名
2)亿扁、其方法startFunction捺典,必須得有@JavascriptInterface
public?class?MyJSOnList?{
@JavascriptInterface
public?void?startFunction()?{
Log.e("TAG",?"http://///JS調(diào)用。从祝。襟己。。startFunction");
Toast.makeText(MainActivity.this,?"js調(diào)用了java函數(shù)",?Toast.LENGTH_SHORT).show();
runOnUiThread(new?Runnable()?{
@Override
public?void?run()?{
msgView.setText(msgView.getText()?+?"\njs調(diào)用了java函數(shù)");
}
});
}
}