最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

使用Rhino讓java執(zhí)行javascript的方法實例

 更新時間:2013年12月05日 11:53:35   作者:  
這篇文章主要介紹了java使用Rhino執(zhí)行javascript的方法,Rhino由Mozilla開發(fā),是 JavaScript 一種基于Java的實現(xiàn)

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

把js.jar拷貝到項目工程

實現(xiàn)從Java中執(zhí)行js中的函數(shù)、從js中調(diào)用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執(zhí)行js的方法 */
    private static final String JAVA_CALL_JS_FUNCTION = "function Test(){ return '農(nóng)民伯伯 java call js Rhino'; }";

    /** js調(diào)用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(); }";

    /**
     * 執(zhí)行JS
     *
     * @param js js代碼
     * @param functionName js方法名稱
     * @param functionParams js方法參數(shù)
     * @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 "農(nóng)民伯伯 js call Java Rhino";
    }
}

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

相關(guān)文章

  • springboot 文件上傳大小配置的方法

    springboot 文件上傳大小配置的方法

    本篇文章主要介紹了springboot 文件上傳大小配置的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-10-10
  • Java線程并發(fā)中常見的鎖機制詳細介紹

    Java線程并發(fā)中常見的鎖機制詳細介紹

    越來越多的互聯(lián)網(wǎng)企業(yè)面臨著用戶量膨脹而帶來的并發(fā)安全問題。接下來通過本文給大家介紹Java線程并發(fā)中常見的鎖機制,感興趣的朋友一起看看吧
    2016-05-05
  • Struts2 通過ognl表達式實現(xiàn)投影

    Struts2 通過ognl表達式實現(xiàn)投影

    這篇文章主要介紹了Struts2 通過ognl表達式實現(xiàn)投影,具有一定參考價值,需要的朋友可以了解下。
    2017-09-09
  • Spring Native實現(xiàn)0.059s啟動一個SpringBoot項目

    Spring Native實現(xiàn)0.059s啟動一個SpringBoot項目

    Spring Native是Spring框架的一個子項目,旨在提供一種將Spring應(yīng)用程序編譯為本地可執(zhí)行文件的方法,從而提高啟動時間和資源效率,本文主要介紹了Spring Native實現(xiàn)0.059s啟動一個SpringBoot項目,感興趣的可以了解一下
    2024-02-02
  • SpringIOC refresh()初始化代碼實例

    SpringIOC refresh()初始化代碼實例

    這篇文章主要介紹了SpringIOC refresh()初始化代碼實例,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-03-03
  • 避免多個jar通過maven打包導致同名配置文件覆蓋沖突問題

    避免多個jar通過maven打包導致同名配置文件覆蓋沖突問題

    這篇文章主要介紹了避免多個jar通過maven打包導致同名配置文件覆蓋沖突問題,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進步,早日升職加薪
    2023-05-05
  • Springboot中如何集成Druid

    Springboot中如何集成Druid

    Druid是Java語言中最好的數(shù)據(jù)庫連接池,Druid能夠提供強大的監(jiān)控和擴展功能,本篇主要講解一下?Springboot中如何集成?Druid?,感興趣的朋友跟隨小編一起看看吧
    2023-06-06
  • SpringBoot3.0自定stater模塊的操作流程(chatGPT提供的49種場景)

    SpringBoot3.0自定stater模塊的操作流程(chatGPT提供的49種場景)

    SpringBoot3.0發(fā)布等重磅陸消息續(xù)進入大家的視線,而本文作者將以技術(shù)整合的角度,帶大家把最火的兩個技術(shù)整合在一起,通過本文學習你將熟悉SpringBoot3.0自定stater模塊的操作流程,并熟悉OpenAi為chatGPT提供的49種場景,感興趣的朋友一起看看吧
    2022-12-12
  • Java如何求交集、并集、差集

    Java如何求交集、并集、差集

    這篇文章主要介紹了Java如何求交集、并集、差集問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • 詳解Spring整合mybatis--Spring中的事務(wù)管理(xml形式)

    詳解Spring整合mybatis--Spring中的事務(wù)管理(xml形式)

    這篇文章主要介紹了Spring整合mybatis--Spring中的事務(wù)管理(xml形式),本文通過實例代碼給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-11-11

最新評論

托里县| 尼勒克县| 礼泉县| 碌曲县| 阆中市| 启东市| 弥渡县| 松原市| 夏邑县| 肃北| 开封县| 西宁市| 克山县| 大渡口区| 西乌珠穆沁旗| 伊通| 德钦县| 高阳县| 桃江县| 陇南市| 鄂州市| 怀来县| 子洲县| 随州市| 河北省| 晋城| 务川| 乡宁县| 北京市| 高邑县| 忻城县| 大连市| 甘孜| 逊克县| 满洲里市| 堆龙德庆县| 潞城市| 长寿区| 宣武区| 东阿县| 云龙县|