js不能直接調(diào)用java代碼。
站在用戶的角度思考問(wèn)題,與客戶深入溝通,找到江蘇網(wǎng)站設(shè)計(jì)與江蘇網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗(yàn),讓設(shè)計(jì)與互聯(lián)網(wǎng)技術(shù)結(jié)合,創(chuàng)造個(gè)性化、用戶體驗(yàn)好的作品,建站類型包括:成都網(wǎng)站制作、成都網(wǎng)站建設(shè)、外貿(mào)營(yíng)銷網(wǎng)站建設(shè)、企業(yè)官網(wǎng)、英文網(wǎng)站、手機(jī)端網(wǎng)站、網(wǎng)站推廣、空間域名、虛擬空間、企業(yè)郵箱。業(yè)務(wù)覆蓋江蘇地區(qū)。
可以通過(guò)頁(yè)面提交后臺(tái)的方式,間接調(diào)用后臺(tái)的服務(wù)java代碼。
也可以通過(guò)ajax的方式,調(diào)用后臺(tái)的服務(wù)java代碼。
兩種方式稍有差別,不過(guò)都是前后臺(tái)的通信交互。
首先是網(wǎng)頁(yè):
%@?page?language="java"?import="java.util.*"?pageEncoding="UTF-8"%??
!DOCTYPE?HTML??
html??
head??
meta?http-equiv="Content-Type"?content="text/html;?charset=UTF-8"??
titlejs和android相互調(diào)用/title??
head??
script?type="text/javascript"?language="javascript"??
//調(diào)用java方法jsCallJava()??
function?showHtmlcallJava()?{??
var?str?=?window.android.jsCallJava();??
document.getElementById("info1").value?=?str;??
}??
//調(diào)用java方法jsCallJavaWithParams(String?var),帶參數(shù)??
function?showHtmlcallJava2()?{??
var?str?=?window.android.jsCallJavaWithParams("Devin?Chen");??
document.getElementById("info2").value?=?str;??
}??
//提供給java調(diào)用的方法??
function?show()?{??
document.getElementById("id_input").value?=?"Java調(diào)用Html中的方法";??
}??
//提供給java調(diào)用的方法,帶參數(shù)??
function?showWithParam(param)?{??
document.getElementById("id_input2").value?=?"Java調(diào)用Html中的方法:?"?+?param;??
}??
/script??
/head??
body??
input?id="info1"?style="width:?90%"?type="text"?value="null"?/br??
input?type="button"?value="Html調(diào)用Java方法"?onclick="showHtmlcallJava()"?/br??
input?id="info2"?style="width:?90%"?type="text"?value="null"?/br??
input?type="button"?value="Html調(diào)用帶參數(shù)的Java方法"?onclick="showHtmlcallJava2()"?/br??
input?id="id_input"?style="width:?90%"?type="text"?value="null"?/br??
input?type="button"?value="Java調(diào)用Html方法"?onclick="window.android.javaCallJavaScript()"?/br??
input?id="id_input2"?style="width:?90%"?type="text"?value="null"?/br??
input?type="button"?value="Java調(diào)用帶參數(shù)的Html方法"?onclick="window.android.javaCallJavaScriptWithParams()"?/??
/body??
/html
Android部分的布局就一個(gè)WebView,MainActivity源代碼:
/**?
*?java方法和javascript方法的相互調(diào)用?
*/??
public?class?MainActivity?extends?AppCompatActivity?{??
private?static?final?String?url?=?"";??
private?WebView?mWebView;??
@Override??
protected?void?onCreate(Bundle?savedInstanceState)?{??
super.onCreate(savedInstanceState);??
setContentView(R.layout.activity_main);??
initView();??
}??
private?void?initView()?{??
mWebView?=?(WebView)?findViewById(R.id.web_main);??
WebSettings?settings?=?mWebView.getSettings();??
settings.setJavaScriptEnabled(true);??
settings.setDefaultTextEncodingName("utf-8");??
mWebView.loadUrl(url);??
mWebView.setWebViewClient(new?WebViewClient());??
//這兩句是必須的,"android"就是jsp中調(diào)用方法時(shí)window后面的對(duì)象??
Object?obj?=?getObject();??
mWebView.addJavascriptInterface(obj,?"android");??
}??
private?Object?getObject()?{??
Object?obj?=?new?Object()?{??
/**?
*?html中的JavaScript調(diào)用Java方法?
*?注解是必須的?
*?@return?
*/??
@JavascriptInterface??
public?String?jsCallJava()?{??
return?"JavaScript調(diào)用Java方法";??
}??
/**?
*?html中的JavaScript調(diào)用帶參數(shù)的Java方法?
*?注解是必須的?
*?@return?
*/??
@JavascriptInterface??
public?String?jsCallJavaWithParams(String?var)?{??
return?"JavaScript調(diào)用帶參數(shù)的Java方法"?+?var;??
}??
/**?
*?java調(diào)用html中的方法,遺憾的是不知道有什么辦法可以拿到返回值?
*/??
@JavascriptInterface??
public?void?javaCallJavaScript()?{??
runOnUiThread(new?Runnable()?{??
@Override??
public?void?run()?{??
mWebView.loadUrl("javascript:show()");??
}??
});??
}??
/**?
*?java調(diào)用html中的方法,并且傳遞參數(shù),這個(gè)有大用?
*/??
@JavascriptInterface??
public?void?javaCallJavaScriptWithParams()?{??
runOnUiThread(new?Runnable()?{??
@Override??
public?void?run()?{??
mWebView.loadUrl("javascript:showWithParam('baoge')");??
}??
});??
}??
};??
return?obj;??
}??
}
一般的瀏覽器中是無(wú)法通過(guò)js調(diào)用本地java程序的,但是可以調(diào)用嵌入到網(wǎng)頁(yè)的applet的方法。交互方式如下:
applet?codebase?=?"."?width?=?"400"?height??=?"400"
name=?"MyApplet"?code?=?"test.applets.MyApplet1.class"?
script
//?js訪問(wèn)applet屬性:document.appletName.appletField?(屬性必須是public的)?
//?js訪問(wèn)Applet方法:document.appletName.appletMethod?(方法必須是public的)
function?showLable{
//?調(diào)用test.applets.MyApplet1類的invokeByJS方法?
document.applets["MyApplet"].invokeByJS('myvalue');
}
/script
\r\n\r\n//上面我用java代碼根據(jù)id取得了一個(gè)user類的實(shí)體 u 下面就可以用js操作顯示等等\r\nalert();//在窗口打印一個(gè)用戶名\r\n\r\n