【Android】不使用WebView来执行Javascript脚本(Rhino)

简介:

一、准备

项目地址:https://developer.mozilla.org/en-US/docs/Rhino

项目说明:由Mozilla开发,是 JavaScript 一种基于Java的实现。

项目使用:把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";
    }
}

 本文转自博客园农民伯伯的博客,原文链接:【Android】不使用WebView来执行Javascript脚本(Rhino),如需转载请自行联系原博主。


目录
相关文章
|
11月前
|
缓存 JavaScript 前端开发
Android WebView常见问题
本文主要介绍了在Android开发中WebView的使用方法,包括加载网址、设置相关属性(如JavaScript支持、缓存模式、屏幕适配等)、监听网页加载过程以及返回上一页面的功能实现。同时针对Android P版本限制明文流量的问题(ERR_CLEARTEXT_NOT_PERMITTED),提供了在`AndroidManifest.xml`中添加`android:usesCleartextTraffic="true"`的解决办法。文章还附有完整代码示例,帮助开发者快速上手并解决常见问题。希望对您的开发工作有所帮助!
649 1
|
9月前
|
前端开发
WebView2 控件(基于 Microsoft Edge (Chromium) 的嵌入式浏览器控件),保存资源(图片、脚本、CSS)
WebView2 控件(基于 Microsoft Edge (Chromium) 的嵌入式浏览器控件),保存资源(图片、脚本、CSS)
423 71
|
8月前
|
机器学习/深度学习 Android开发 数据安全/隐私保护
手机脚本录制器, 脚本录制器安卓,识图识色屏幕点击器【autojs】
完整的UI界面,包含录制控制按钮和状态显示 屏幕点击动作录制功能,记录点击坐标和时间间隔
|
9月前
|
Android开发 数据安全/隐私保护 Python
微信抢红包脚本安卓插件,微信xposed抢红包模块, magisk微信抢红包模块
这个代码实现了一个完整的微信抢红包自动化工具,包含红包检测、自动点击、日志记录等功能
|
9月前
|
监控 Android开发 数据安全/隐私保护
批量发送短信的平台,安卓群发短信工具插件脚本,批量群发短信软件【autojs版】
这个Auto.js脚本实现了完整的批量短信发送功能,包含联系人管理、短信内容编辑、发送状态监控等功能
|
XML JavaScript Android开发
【Android】网络技术知识总结之WebView,HttpURLConnection,OKHttp,XML的pull解析方式
本文总结了Android中几种常用的网络技术,包括WebView、HttpURLConnection、OKHttp和XML的Pull解析方式。每种技术都有其独特的特点和适用场景。理解并熟练运用这些技术,可以帮助开发者构建高效、可靠的网络应用程序。通过示例代码和详细解释,本文为开发者提供了实用的参考和指导。
485 15
|
JavaScript Shell C#
多种脚本批量下载 Docker 镜像:Shell、PowerShell、Node.js 和 C#
本项目提供多种脚本(Shell、PowerShell、Node.js 和 C#)用于批量下载 Docker 镜像。配置文件 `docker-images.txt` 列出需要下载的镜像及其标签。各脚本首先检查 Docker 是否安装,接着读取配置文件并逐行处理,跳过空行和注释行,提取镜像名称和标签,调用 `docker pull` 命令下载镜像,并输出下载结果。使用时需创建配置文件并运行相应脚本。C# 版本需安装 .NET 8 runtime。
993 4
|
JSON 移动开发 JavaScript
在浏览器执行js脚本的两种方式
【10月更文挑战第20天】本文介绍了在浏览器中执行HTTP请求的两种方式:`fetch`和`XMLHttpRequest`。`fetch`支持GET和POST请求,返回Promise对象,可以方便地处理异步操作。`XMLHttpRequest`则通过回调函数处理请求结果,适用于需要兼容旧浏览器的场景。文中还提供了具体的代码示例。
289 5
在浏览器执行js脚本的两种方式
|
程序员 开发工具 Android开发
Android|WebView 禁止长按,限制非白名单域名的跳转层级
如何限制 WebView 仅域名白名单网址能随意跳转,并禁用长按选择文字。
401 2
|
JSON JavaScript 前端开发
Android调用Vue中的JavaScript代码
Android调用Vue中的JavaScript代码
430 3

热门文章

最新文章