zoukankan      html  css  js  c++  java
  • java调用js函数

    问题:js函数可能有多个,之间有相互调用关系,有jquery

    jar包 org.mozilla.javascript-1.7.2

    js   envjs-1.2.js

    java代码

    import java.io.FileNotFoundException;
    import java.io.FileReader;
    import java.io.IOException;
    import java.io.InputStream;
    import java.util.Date;
    
    import org.apache.commons.io.IOUtils;
    import org.apache.commons.lang.Validate;
    import org.mozilla.javascript.Context;
    import org.mozilla.javascript.ContextFactory;
    import org.mozilla.javascript.Function;
    import org.mozilla.javascript.Scriptable;
    
    public class RhinoScaper {
        private Context context;
        private Scriptable scriptable;
    
        /**
         * 初始化方法
         */
        public void init() {
            context = ContextFactory.getGlobal().enterContext();
            scriptable = context.initStandardObjects(null);
            context.setOptimizationLevel(-1);
            context.setLanguageVersion(Context.VERSION_1_5);
            context.evaluateString(scriptable, "var v='sssaass';"
                    + "var print = function(v) {"
                    + " java.lang.System.out.println(v);return v ;"
                    + " };function hah(){return v }", "print", 1, null);
            String files = "envjs-1.2.js,jquery.js,自己的js";
            String[] file = files.split(",");
            for (String f : file) {
                evaluateJs(f);
            }
        }
    
        /**
         * 调用函数
         * 
         * @param functionName
         * @param functionArags
         * @return
         */
        public Object invokFunction(String functionName, Object... functionArags) {
            Validate.notNull(context, "context is null");
            Validate.notNull(scriptable, "scriptable is null");
            Function function = (Function) scriptable.get(functionName, scriptable);
            Object call = function.call(Context.getCurrentContext(), scriptable,
                    function, functionArags);
            // System.out.println("reslult  = "+call.toString());
            return call;
        }
    
       
        public void evaluateJs(String f) {
            Validate.notNull(context, "context is null");
            Validate.notNull(scriptable, "scriptable is null");
            FileReader in = null;
            try {
                in = new FileReader(f);
                context.evaluateReader(scriptable, in, f, 1, null);
            } catch (FileNotFoundException e1) {
                // e1.printStackTrace();
                throw new RuntimeException("unknown file " + f);
            } catch (IOException e1) {
                e1.printStackTrace();
            } finally {
                // close(in);
                IOUtils.closeQuietly(in);
            }
        }
    
        public static void main(String[] args) throws Exception {
            RhinoScaper rhinoScaper = new RhinoScaper();
            rhinoScaper.init();
            
            String param1= "";//参数1
         String param2="";//参数2 Object result
    = rhinoScaper.invokFunction("函数名称", param1, param2); System.out.println(result); } /** * 加载js文件 * * @param sourceName * 名称 * @param classpathURI * 文件路径 */ public void loadJS(String sourceName, String classpathURI) { Validate.notNull(context, "context is null"); Validate.notNull(scriptable, "scriptable is null"); String js = null; InputStream inputStream = null; try { inputStream = getClass().getResourceAsStream(classpathURI); js = IOUtils.toString(inputStream, "UTF-8");// 设置默认js文件编码为utf-8 } catch (IOException e) { e.printStackTrace(); } finally { IOUtils.closeQuietly(inputStream); } context.evaluateString(scriptable, js, sourceName, 1, null); } /** * 加载js字符串 * * @param source * js字符串(注意处理js中由于变量名为throws,float类似名称导致的报错) * @param sourceName * 名称 */ public void JSloadString(String source, String sourceName) { Validate.notNull(context, "context is null"); Validate.notNull(scriptable, "scriptable is null"); context.evaluateString(scriptable, source, sourceName, 1, null); } }
  • 相关阅读:
    自动化测试
    Linux分区介绍
    Python 爬虫学习 网页图片下载
    Sublime Text 2 配置
    Python 爬虫学习 urllib2
    Python 爬虫学习 urllib
    Python 学习之 NumPy
    ipython
    2020-2021-1 20209309闫兆森 《Linux内核原理与分析》第二周作业
    2020-2021-1 20209309《Linux内核原理与分析》第一周作业
  • 原文地址:https://www.cnblogs.com/liangbo-/p/8027306.html
Copyright © 2011-2022 走看看