javascript調用java
1. 怎麼用js調用java的介面
http://blog.csdn.net/feifei454498130/article/details/6524183 http://blog.csdn.net/kingsollyu/article/details/6656865
參考這兩個 webSettings.setJavaScriptEnabled(true); 是啟用js,mWebView.addJavascriptInterface(new DemoJavaScriptInterface(), "demo"); 是定義個對象demo,js中調用demo對象就可以調用剛剛定義的java方法 了。這兩個是關鍵
2. webview 遠程js調用本地java實現交互怎麼做
可以,只要你是用webview打開的,那麼不管事遠程還是本地,都可以通過webview與app的本地java代碼進行交互。沒有任何區別。
1、webview必須設置支持Javascript
mWebview.getSettings().setJavaScriptEnabled(true);
2、加進一個回調的代理類JavaScriptInterface,並給它一個調用的名稱:ncp
mWebView.addJavascriptInterface(newJavaScriptInterface(),"ncp");
finalclassJavaScriptInterface{
publicintcallOnJs(){
return1000;
}
publicvoidcallOnJs2(Stringmode){
//TODO
}
}
3、JS頁面
<scripttype="text/javascript">
window.onload=function(){
document.getElementById('btn_1').addEventListener('click',onBtnClick,false);
var_int_value=window.ncp.callOnJs();
alert("getintfromjava:"+_int_value);
}
functiononBtnClick(){
window.ncp.callOnJs2("click");
}
</script>
接下來就可以調用js方法了,
1、Java調用js方法
mWebView.loadUrl("javascript:onSaveCallback()");
2、JS訪問java方法
window.ncp.callOnJs2("click");
3. 如何把java代碼嵌入到javascript中
1.取得腳本解釋器的管理器Manager
2.從管理器中取得js的解釋器實例ScriptEngine
3.取得存儲javascript變數的Bindings實例
4.把一個java.io.Reader流及Bindings傳遞給ScriptEngine的eval方法返回腳本運行結果,如果執行中發生錯誤,會拋出ScriptException異常。
例:運行javascript腳本的一個java程序
throwsIOException{=newScriptEngineManager;//從管理器中獲取js的解釋器//定義我們要運行的腳本文件Stringfilename=null;//通過解釋器來獲得存儲javascript變數的Bindings的實例,使它們提供給腳本。Bindingsbindings=js.createBindings;//在map中獲取和設置值的方法publicObjectget;//使用我們的name/value對(即javascript變數)Bindingsbindings=newSimpleBindings(defaults);//創建一個變數,用於存放腳本執行的內容ScriptContextcontext=newSimpleScriptContext();//設置那些Bindings在Context中,使它們可讀。但這樣的變數定義的腳本不要放入我們的Map中context.setBindings(bindings,ScriptContext.GLOBAL_SCOPE);BufferedReaderin=newBufferedReader(newFileReader(filename));Stringline;while((line=in.readLine())!=null){line=line.trim();if(line.length()==0)continue;//跳過空行if(line.charAt(0)==『#『)continue;//跳過命令intpos=line.indexOf(":");if(pos==-1){("syntax:"+line);}Stringname=line.substring(0,pos).trim();Stringvalue=line.substring(pos+1).trim();charfirstchar=value.charAt(0);intlen=value.length();charlastchar=value.charAt(len-1);if(firstchar==『"『&&lastchar==『"『){//雙引號引用的值為字元串defaults.put(name,value.substring(1,len-1));}elseif(Character.isDigit(firstchar)){//如果開始是一個數字try{doubled=Double.parseDouble(value);defaults.put(name,value);}catch(NumberFormatExceptione){//沒有數字,是一個stringdefaults.put(name,value);}}elseif("true".equals(value)){//處理布爾值defaults.put(name,Boolean.TRUE);}elseif("false".equals(value)){defaults.put(name,Boolean.FALSE);}elseif("null".equals(value)){//處理null值defaults.put(name,null);}elseif(firstchar==『{『&&lastchar==『}『){//如果值是在一對大括弧之內,則執行javascript代碼Stringscript=value.substring(1,len-1);Objectresult=engine.eval(script,context);defaults.put(name,result);}else{//其它情況,剛好是一個字元串defaults.put(name,value);}}}//一個簡單的類的測試程序publicstaticvoidmain(String[]args)throwsIOException,ScriptException{Configurationdefaults=newConfiguration();defaults.load(args[0]);Set
4. 在javascript中能使用java代碼么
當然可以!
1、最基礎的就是jsp,以內嵌java腳本開發動態頁面,大體如一樓回答的請況;
2、將java程序開發JSTL標簽,對一些常用的模塊或功能標簽化,更可達到事倍功半的效果;
5. script 如何 調用 java方法
給你一個dwr框架實現Ajax調用DAO的簡單程序。
script type='text/javascript' src='dwr/interface/testDAOVali.js'></script>
<script type='text/javascript' src='dwr/engine.js'></script>
<script type="text/javascript">
function abc(b) {
alert(b);
}
function checkRepeat(s) {
var o = getElement(s);
if (o) {
testDAOVali.valiUser(o.value,abc);
}
}
function getElement(name) {
var result = null;
var objs = document.getElementsByName(name);
if (objs) {
var o = objs[0];
result = o;
}
return result;
}
</script>
<body>
<input type="text" name="user" >
<input type="button" onclick="checkRepeat('user')" value="檢查是否重復">
</body>
</html>
6. 如何在JAVASCRIPT調用Android JAVA函數
首先是網頁:
<%@pagelanguage="java"import="java.util.*"pageEncoding="UTF-8"%>
<!DOCTYPEHTML>
<html>
<head>
<metahttp-equiv="Content-Type"content="text/html;charset=UTF-8">
<title>js和android相互調用</title>
<head>
<scripttype="text/javascript"language="javascript">
//調用java方法jsCallJava()
functionshowHtmlcallJava(){
varstr=window.android.jsCallJava();
document.getElementById("info1").value=str;
}
//調用java方法jsCallJavaWithParams(Stringvar),帶參數
functionshowHtmlcallJava2(){
varstr=window.android.jsCallJavaWithParams("DevinChen");
document.getElementById("info2").value=str;
}
//提供給java調用的方法
functionshow(){
document.getElementById("id_input").value="Java調用Html中的方法";
}
//提供給java調用的方法,帶參數
functionshowWithParam(param){
document.getElementById("id_input2").value="Java調用Html中的方法:"+param;
}
</script>
</head>
<body>
<inputid="info1"style="width:90%"type="text"value="null"/><br>
<inputtype="button"value="Html調用Java方法"onclick="showHtmlcallJava()"/><br>
<inputid="info2"style="width:90%"type="text"value="null"/><br>
<inputtype="button"value="Html調用帶參數的Java方法"onclick="showHtmlcallJava2()"/><br>
<inputid="id_input"style="width:90%"type="text"value="null"/><br>
<inputtype="button"value="Java調用Html方法"onclick="window.android.javaCallJavaScript()"/><br>
<inputid="id_input2"style="width:90%"type="text"value="null"/><br>
<inputtype="button"value="Java調用帶參數的Html方法"onclick="window.android.javaCallJavaScriptWithParams()"/>
</body>
</html>
Android部分的布局就一個WebView,MainActivity源代碼:
/**
*java方法和javascript方法的相互調用
*/
{
privatestaticfinalStringurl="http://192.168.0.100:8080/server";
privateWebViewmWebView;
@Override
protectedvoidonCreate(BundlesavedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
}
privatevoidinitView(){
mWebView=(WebView)findViewById(R.id.web_main);
WebSettingssettings=mWebView.getSettings();
settings.setJavaScriptEnabled(true);
settings.setDefaultTextEncodingName("utf-8");
mWebView.loadUrl(url);
mWebView.setWebViewClient(newWebViewClient());
//這兩句是必須的,"android"就是jsp中調用方法時window後面的對象
Objectobj=getObject();
mWebView.addJavascriptInterface(obj,"android");
}
privateObjectgetObject(){
Objectobj=newObject(){
/**
*html中的JavaScript調用Java方法
*註解是必須的
*@return
*/
@JavascriptInterface
publicStringjsCallJava(){
return"JavaScript調用Java方法";
}
/**
*html中的JavaScript調用帶參數的Java方法
*註解是必須的
*@return
*/
@JavascriptInterface
(Stringvar){
return"JavaScript調用帶參數的Java方法"+var;
}
/**
*java調用html中的方法,遺憾的是不知道有什麼辦法可以拿到返回值
*/
@JavascriptInterface
publicvoidjavaCallJavaScript(){
runOnUiThread(newRunnable(){
@Override
publicvoidrun(){
mWebView.loadUrl("javascript:show()");
}
});
}
/**
*java調用html中的方法,並且傳遞參數,這個有大用
*/
@JavascriptInterface
(){
runOnUiThread(newRunnable(){
@Override
publicvoidrun(){
mWebView.loadUrl("javascript:showWithParam('baoge')");
}
});
}
};
returnobj;
}
}
7. 給我一個在html裡面調用java類(Java代碼)的範例,用javascript調用java類啊
如果你只是測試java類中的一個方法的話,新建java-web項目
寫一個無返回值的方法。
在web默認啟動的jsp頁面添加以下內容:
<!--導Jquery包-->
<scriptsrc="js/project/jquery-1.7.2.min.js"></script>
<scripttype="text/javascript">
$(function(){
$.ajax({
url:"你的方法路徑(在web.xml文件中配的訪問路徑)",
data:{},//參數json格式
success:function(data){
alert(data);//data就是執行方法後返回來的值
}
});
})
</script>
如果你的java類方法中沒有用PrintWriter.print()方法就不會彈出信息,但是你把斷點打在測試的方法裡面,如果路徑是對,啟動項目後進入調試模式說明已經進入方法。
8. JavaScript的對象怎麼在java後台調用
JavaScript的對象怎麼在java後台調用
//java調用js腳本的例子
=newScriptEngineManager();
ScriptEnginejsEngine=scriptEngineMgr.getEngineByName("JavaScript");
StringBuffersb=newStringBuffer();
//組裝js代碼,也可以從文件讀入腳本到sb變數
jsEngine.put("myContext",myContext);//放置其他參數
jsEngine.eval(sb.toString());//解析、執行腳本
9. java怎麼調用javascript
可參考:
package javaIjs;
/**
* @param args
*/
import java.io.FileReader;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
/**
* Java調用並執行js文件,傳遞參數,並活動返回值
*
* @author manjushri
*/
public class ScriptEngineTest {
public static void main(String[] args) throws Exception {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("javascript");
String jsFileName = System.getProperty("user.dir")+"/src/javaIjs/expression.js";
// 讀取js文件
FileReader reader = new FileReader(jsFileName);
// 執行指定腳本
System.out.println(engine.getContext().getReader());
engine.eval(reader);
if (engine instanceof Invocable) {
Invocable invoke = (Invocable) engine;
// 調用merge方法,並傳入兩個參數
// c = merge(2, 3);
Double c = (Double) invoke.invokeFunction("merge1", 21, 3);
System.out.println("c = " + c);
}
reader.close();
}
}
10. JavaScript的對象怎麼在java後台調用
0
javascript的對象和java是不能互通的。如果js一定要訪問java也不是不可以,要裝一個插件性質的東西。
建議:
1,使用DWR做對象映射。
2,把對象變成一段json傳到後端解析。