资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

java注入js代码 java命令注入

怎么把JS嵌入到Java程序中

1.取得脚本解释器的管理器Manager

成都创新互联公司是一家专业从事做网站、成都网站制作、网页设计的品牌网络公司。如今是成都地区具影响力的网站设计公司,作为专业的成都网站建设公司,成都创新互联公司依托强大的技术实力、以及多年的网站运营经验,为您提供专业的成都网站建设、营销型网站建设及网站设计开发服务!

2.从管理器中取得js的解释器实例ScriptEngine

3.取得存储javascript变量的Bindings实例

4.把一个java.io.Reader流及Bindings传递给ScriptEngine的eval方法返回脚本运行结果,如果执行中发生错误,会抛出ScriptException异常。

例:运行javascript脚本的一个java程序

throwsIOException{ScriptEngineManagerscriptManager=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){thrownewIllegalArgumentException("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

如何在WebView中通过Java传递给JS数组

1.整体思路:

js调用java

首先将js代码注入到webview的页面中,然后通过修改window.location.href来向java传递参数,java端通过监听页面url的改变来识别js端传递的参数.然后再经解析数据实现java方法的调用.

java调用js

java通过webView.loadUrl("JavaScript:"+jsCode);来实现js代码的调用

2. java调用js的实现

java调用js的方法,相当简单:

String jsCode = "(function(){ /*js code here*/ })()";

webview.loadUrl("javascript:" + jsCode);

注意:要把js代码用自执行函数包裹起来

利用这种方法可以把任意代码注入到页面中

注意: 当页面刚加载时就需要把 2.1中的js代码注入到页面中,但是有时会出现页面加载完成,但是注入的代码没有执行的现象,应该是因为js没有及时加载而页面先加载完成。要解决这个问题就需要在页面加载完成时触发一个事件比如jsBridgeReady,js端通过监听jsBridgeReady事件来调用java方法。那么总体流程如下:

加载页面-注入js代码-页面加载完成-触发js注入完成事件

代码:

在BridgeWebClient中添加逻辑: 1,加载页面时注入js代码: 2,加载完成后触发加载完成事件

@Override

public void onLoadResource(WebView view, String url) {

// 注入桥接代码

// 这里通过读取js文件获得js代码

if (mFileName != null) {

view.loadUrl(mBridge.createBaseJs(mContext, mFileName));

}

super.onLoadResource(view, url);

}

@Override

public void onPageFinished(WebView view, String url) {

super.onPageFinished(view, url);

// 触发注入完成事件,用于解决 注入的代码没有及时加载成功导致无法调用的问题

view.loadUrl("(function(){if(window.UAPPJSBridgeReady){window.UAPPJSBridgeReady();}})()");

}

如果你也想从文件读取js代码,记得把读取的代码压缩一下,把注释和换行删除,不然很可能会报错

js端调用java注入的代码:

//判断代码是否注入完成

if(window.UAPPJSBridge){

//调用注入的方法

window.UAPPJSBridge.wxshare(message,success,error);

}else{

//监听注入完成的事件

window.onBridgeLoaded=function(){

if(window.UAPPJSBridge){

window.UAPPJSBridge.wxshare(message,success,error);

}

}

}

如何将JSP中的java代码中的值,传入JS代码中去

js与java是不同语言,运行在不同环境下,因此无法直接获得对方数据。

java运行在服务器端,在同一个jsp文件中,java先运行,js后运行,java可以生成一段js代码,保证js运行得到相应的结果,因此可以用java定义js变量的方式来传递数据,例如:

script

var url="%=url%";

alert(username);

/script

上面例子,%%中的内容会在服务器端运行,在“”中间输出网址,浏览器就会加载下面的结果:

script

var url="gif8.cn";

alert(url);

/script

这部分就是标准的js代码了。


网站名称:java注入js代码 java命令注入
转载源于:http://cdkjz.cn/article/doiogde.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220