参考
http://www.cnblogs.com/yesun/archive/2008/04/02/1134041.html
http://heisetoufa.iteye.com/blog/227714
package com.kaixin001.common;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.io.LineNumberReader;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import org.mozilla.javascript.Context;
import org.mozilla.javascript.Function;
import org.mozilla.javascript.Scriptable;
public class ScriptHelper {
private Context cx;
private Scriptable scope;
public ScriptHelper() {
this.cx = Context.enter();
this.scope = cx.initStandardObjects();
}
public Object runJavaScriptByFile(String filename) {
String jsContent = this.getJsContent(filename);
Object result = cx.evaluateString(scope, jsContent, filename, 1, null);
return result;
}
public Object runJavaScript(String jsContent) {
Object result = cx.evaluateString(scope, jsContent, "", 1, null);
return result;
}
private static String getJsContent(String filename) {
LineNumberReader reader;
try {
reader = new LineNumberReader(new FileReader(filename));
String s = null;
StringBuffer sb = new StringBuffer();
while ((s = reader.readLine()) != null) {
sb.append(s).append("\n");
}
return sb.toString();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
return null;
}
}
public Scriptable getScope() {
return scope;
}
public static void main(String[] args) throws FileNotFoundException, IOException {
String filename = System.getProperty("user.dir") + "/acc.htm";
// String pattern = "";
String accCode = "";
String script = "";
String script_tmp2 = "";
String var_values = "";
// 得到所有script段
Pattern pattern = Pattern.compile("<script type=\"text/javascript\">.*?</script>", Pattern.DOTALL);
Matcher matcher = pattern.matcher(getJsContent(filename));
String jsContent = "";
while (matcher.find()) {
String js = matcher.group();
if(js.contains("function acc()")) {
jsContent = js.replaceAll("<.*?script.*?>", "");
//System.out.println(jsContent);
}
}
String jsFunction = "acc";
// 开始调用javascript函数
Context cx = Context.enter();
try {
Scriptable scope = cx.initStandardObjects();
cx.evaluateString(scope, jsContent, null, 1, null);
Object fObj = scope.get(jsFunction, scope);
if (!(fObj instanceof Function)) {
System.out.println("找不到方法" + jsFunction);
} else {
Function f = (Function) fObj;
Object result = f.call(cx, scope, scope, null);
System.out.println("返回结果:" + Context.toString(result));
}
} finally {
Context.exit();
}
}
}
分享到:
相关推荐
acc 函数的更通用版本,它累积先前调用中的参数(包括错误)。用法 var acc = require ( 'acc' ) var fn = acc ( 2 , function ( a , b , c ) { // This function is being invoked after two calls of fn() // ...
尾叫tailcall是一个browserify转换和命令行实用程序,可用于消除递归函数中的尾部调用(TCO =尾部调用优化)。 这样可以防止使用的调用堆栈过度增长,并且通常可以提高性能(在大多数情况下)。 尾调用优化是...
带尾调用的原始函数: function counter ( n , acc = 0 ) { if ( n === 0 ) { return acc } else { return counter ( n - 1 , acc + 1 ) }} 被重写为: function counter ( n , acc = 0 ) { var _repeat = true ;...
eslint-plugin-func-params-args ... 假设我们需要调用array.reduce ,有时需要在箭头函数表达式中使用所有提供给 reducer 回调的 4 个参数(如array.reduce((acc, val, index, arr) => {}, {})例如
唯一的偏差是,此实现允许在任何函数中使用this.super(...args)来调用其隐藏的“父”函数(带有或不带有函数参数)。 例子 const d = require('delegate-this'); const base = { derp() { console.log('i am ...
此外,JavaScript这种客户端的脚本语言也提供了对正则表达式的支持,现在正则表达式已经成为了一个通用的概念和工具,被各类技术人员所广泛使用。 在某个Linux网站上面有这样的话:"如果你问一下Linux爱好者最喜欢...
//加法函数,用来得到精确的加法结果 //说明:javascript的加法结果会有误差,在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。 //调用:accAdd(arg1,arg2) //返回值:arg1加上arg2的精确结果 ...
当前迭代将返回,将函数从调用堆栈中删除。 整个递归都包装在一个Promise中,它将解决递归函数的结果 :package: 安装 $ yarn add arecursion-js :wrench: 用法 const recursion = require ( 'arecursion-js' )...
js中浮点型是如何运算的呢? 例如:var a=0.69; 我想得到6.9 直接这样写 var c=a*10; alert(c)... //调用:accAdd(arg1,arg2) //返回值:arg1加上arg2的精确结果 function accAdd(arg1,arg
发送请求到在React App中使用Amplify API类连接到端点breafly:lambda函数将调用第三方服务(免费) 笔记 您将需要一个AWS acc。 并且还需要一些按键来配置项目,观看此了解如何配置Amplify CLI 学分 此示例和代码...
代码如下://问题比如:7*0.8 JavaScript算出来就是:5.6000000000000005 //加法函数,用来得到... //调用:accAdd(arg1,arg2) //返回值:arg1加上arg2的精确结果 function accAdd(arg1, arg2) { var r1, r2, m;
//调用:accAdd(arg1,arg2) //返回值:arg1加上arg2的精确结果 function add(a,b){ var c, d, e; try { c = a.toString().split(.)[1].length; } catch (f) { c = 0; } try { d = b.toString().split(.)[1...
//调用:accAdd(arg1,arg2) //返回值:arg1加上arg2的精确结果 function accAdd(arg1,arg2){ var r1,r2,m; try{r1=arg1.toString().split(“.”)[1].length}catch(e){r1=0} try{r2=arg2.toString().split(“....
然后,在服务器上,您可以访问全局AssembleeNationale命名空间,这使您能够使用以下函数调用异步检索基于法律项目标识符的一系列修订描述: AssembleeNationale . getAmendements ( textId , organismId , ...
只要用户提供的next()函数返回字符串(要获取的下一个URL),该库就会递归调用.get方法。 看。 例子 const request = require ( 'paged-request' ) ; request ( url , options , next ) . then ( acc => console ...