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传到后端解析。