国产片侵犯亲女视频播放_亚洲精品二区_在线免费国产视频_欧美精品一区二区三区在线_少妇久久久_在线观看av不卡

服務器之家:專注于服務器技術及軟件下載分享
分類導航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術|正則表達式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務器之家 - 編程語言 - Java教程 - 使用Rhino讓java執行javascript的方法實例

使用Rhino讓java執行javascript的方法實例

2019-10-23 14:19java教程網 Java教程

這篇文章主要介紹了java使用Rhino執行javascript的方法,Rhino由Mozilla開發,是 JavaScript 一種基于Java的實現

下載Rhino https://developer.mozilla.org/en-US/docs/Rhino

把js.jar拷貝到項目工程

實現從Java中執行js中的函數、從js中調用Java中的方法,代碼:

 

復制代碼代碼如下:


public class MainActivity extends Activity {

 

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        TextView text1 = (TextView) findViewById(android.R.id.text1);
        TextView text2 = (TextView) findViewById(android.R.id.text2);

        text1.setText(runScript(JAVA_CALL_JS_FUNCTION, "Test", new String[] {}));

        text2.setText(runScript(JS_CALL_JAVA_FUNCTION, "Test", new String[] {}));
    }

    /** Java執行js的方法 */
    private static final String JAVA_CALL_JS_FUNCTION = "function Test(){ return '農民伯伯 java call js Rhino'; }";

    /** js調用Java中的方法 */
    private static final String JS_CALL_JAVA_FUNCTION = //
    "var ScriptAPI = java.lang.Class.forName(\"" + MainActivity.class.getName() + "\", true, javaLoader);" + //
        "var methodRead = ScriptAPI.getMethod(\"jsCallJava\", [java.lang.String]);" + //
        "function jsCallJava(url) {return methodRead.invoke(null, url);}" + //
        "function Test(){ return jsCallJava(); }";

    /**
     * 執行JS
     * 
     * @param js js代碼
     * @param functionName js方法名稱
     * @param functionParams js方法參數
     * @return
     */
    public String runScript(String js, String functionName, Object[] functionParams) {
        Context rhino = Context.enter();
        rhino.setOptimizationLevel(-1);
        try {
            Scriptable scope = rhino.initStandardObjects();

            ScriptableObject.putProperty(scope, "javaContext", Context.javaToJS(MainActivity.this, scope));
            ScriptableObject.putProperty(scope, "javaLoader", Context.javaToJS(MainActivity.class.getClassLoader(), scope));

            rhino.evaluateString(scope, js, "MainActivity", 1, null);

            Function function = (Function) scope.get(functionName, scope);

            Object result = function.call(rhino, scope, scope, functionParams);
            if (result instanceof String) {
                return (String) result;
            } else if (result instanceof NativeJavaObject) {
                return (String) ((NativeJavaObject) result).getDefaultValue(String.class);
            } else if (result instanceof NativeObject) {
                return (String) ((NativeObject) result).getDefaultValue(String.class);
            }
            return result.toString();//(String) function.call(rhino, scope, scope, functionParams);
        } finally {
            Context.exit();
        }
    }

    public static String jsCallJava(String url) {
        return "農民伯伯 js call Java Rhino";
    }
}

 

注意,混淆的時候js.jar可能混淆不過去,請參照文章4.1的方法。

延伸 · 閱讀

精彩推薦
主站蜘蛛池模板: 中文日韩av| 欧美精品一区二区在线观看 | 亚洲无线看 | 国产精品久久久久久久 | 久久se精品一区精品二区 | 天天精品视频免费观看 | 欧美电影免费观看网站 | 亚洲精品一区二区在线观看 | 色吧av | 欧美精品一二三区 | 久久久久久av | 一个色综合色 | 午夜a级理论片915影院 | 亚洲高清在线视频 | 久草在线 | 久久久成人av | 在线成人国产 | 激情综合网激情 | 国产香蕉视频在线播放 | 精品久久久久久国产 | 亚洲国产精品一区二区第一页 | 欧美日一区二区 | 免费的黄视频 | 欧美在线观看一区 | 久久噜噜噜精品国产亚洲综合 | 成人在线免费观看 | 欧美日韩亚洲成人 | 欧美激情一区二区三级高清视频 | 国内精品视频 | 美女搞黄网站 | 九九亚洲| 91精品电影| 亚洲不卡视频在线 | 久久国产精品一区二区 | 超碰首页 | 在线视频 亚洲 | 欧美日韩激情 | 国产色婷婷 | 国产在线观看一区 | 国产一区 | 人人人人人你人人人人人 |