安卓运行js代码,安卓 运行js

发布时间:2023-12-08

安卓运行js代码,安卓 运行js

更新:2022-11-20 15:42

本文目录一览:

  1. android里如何调用Js里的函数
  2. nodejs 在 android 系统里面怎么运行
  3. android 中如何去执行js脚本
  4. Android调用js的问题

android里如何调用Js里的函数

Android中内置了WebKit模块,而该模块的Java层视图类就是WebView,所有需要使用Web浏览器功能的Android都需要创建该视图类对象显示和处理请求的网络资源。目前WebKit支持Http、Https、Ftp和JavaScript请求。

  1. 在Assets下放一个简单的html文件jstest.html HTML HEAD meta name="viewport" content="width=device-width, target-densitydpi=device-dpi" / META http-equiv="Content-Type" content="text/html; charset=UTF-8" script function showMsg(){ alert("hello world!"); } function showMsgInAndroid(){ myjs.showMsg('hello in android!'); } /script /HEAD BODY span测试js使用/span button id='btntest' onclick='showMsgInAndroid()'调用android方法/button /BODY /HTML
  2. 布局文件main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
    android:id="@+id/rl_main"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    xmlns:android="">
    <WebView
        android:id="@+id/wv_test"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent"
        android:layout_above="@+id/btn_showmsg"/>
    <Button
        android:id="@+id/btn_showmsg"
        android:layout_width="200dip"
        android:layout_height="40dip"
        android:layout_alignParentBottom="true"
        android:layout_centerHorizontal="true"
        android:text="调用html中js方法"/>
</RelativeLayout>
  1. 然后是Activity,MainActivity.java
package com.harold.jstest;
import com.harold.base.JSKit;
import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.webkit.WebChromeClient;
import android.webkit.WebView;
import android.widget.Button;
public class MainActivity extends Activity {
    private WebView mWebView;
    private Button btnShowInfo;
    private JSKit js;
    private Handler mHandler = new Handler();
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);
        //初始化控件
        mWebView = (WebView) findViewById(R.id.wv_test);
        btnShowInfo = (Button) findViewById(R.id.btn_showmsg);
        //实例化js对象
        js = new JSKit(this);
        //设置参数
        mWebView.getSettings().setBuiltInZoomControls(true);
        //内容的渲染需要webviewChromClient去实现,
        //设置webviewChromClient基类,解决js中alert不弹出的问题和其他内容渲染问题
        mWebView.setWebChromeClient(new WebChromeClient());
        mWebView.getSettings().setJavaScriptEnabled(true);
        //把js绑定到全局的myjs上,myjs的作用域是全局的,初始化后可随处使用
        mWebView.addJavascriptInterface(js, "myjs");
        mWebView.loadUrl("");
        btnShowInfo.setOnClickListener(new OnClickListener() {
            @Override
            public void onClick(View v) {
                mHandler.post(new Runnable() {
                    @Override
                    public void run() {
                        //调用 HTML 中的javaScript 函数
                        mWebView.loadUrl("javascript:showMsg()");
                    }
                });
            }
        });
    }
}

nodejs 在 android 系统里面怎么运行

每种语言都有自己的优势,互相结合起来各取所长程序执行起来效率更高或者说哪种实现方式较简单就用哪个,nodejs是利用子进程来调用系统命令或者文件,文档见nodejs.org/api/child_process.html,NodeJS子进程提供了与系统交互的重要接口,其主要API有:标准输入、标准输出及标准错误输出的接口。NodeJS子进程提供了与系统交互的重要接口,其主要API有:标准输入、标准输出及标准错误输出的接口

  • child.stdin 获取标准输入
  • child.stdout 获取标准输出
  • child.stderr 获取标准错误输出
  • 获取子进程的PID:child.pid
  • 提供生成子进程的方法:child_process.spawn(cmd,args=[], [options])
  • 提供直接执行系统命令的方法:child_process.exec(cmd,[options],callback)
  • 提供调用脚本文件的方法:child_process.execFile(file,[args],[options],[callback])
  • 提供杀死进程的方法:child.kill(signal='SIGTERM') 用实例来感受一下,很有意思的,呵呵~~
  1. 利用子进程调用系统命令(获取系统内存使用情况)新建nodejs文件,名为cmd_spawn.js,代码如下:
var spawn = require('child_process').spawn;
free = spawn('free',['-m']);
//捕获标准输出并将其打印到控制台
free.stdout.on('data',function(data){
    console.log('standard output:\n' + data);
});
//捕获标准错误输出并将其打印到控制台
free.stderr.on('data',function(data){
    console.log('standard error output:\n' + data);
});
//注册子进程关闭事件
free.on('exit',function(code,signal){
    console.log('child process eixt,exit:' + code);
});

android 中如何去执行js脚本

按照给定的字符集存储文件时,在文件的最开头的三个字节中就有可能存储着编码信息,所以,基本的原理就是只要读出文件前三个字节,判定这些字节的值,就可以得知其编码的格式。 其实,如果项目运行的平台就是中文操作系统, 如果这些文本文件在项目内产生,即开发人员可以控制文本的编码格式, 只要判定两种常见的编码就可以了:gbk和utf-8。 由于中文windows默认的编码是gbk,所以一般只要判定utf-8编码格式。

Android调用js的问题

Android中可以使用WebView加载网页,同时Android端的java代码可以与网页上的javascript代码之间相互调用。

一 Android部分:

布局代码:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:focusable="true"
    android:focusableInTouchMode="true"
    android:orientation="vertical"
    android:padding="8dp"
    tools:context=".MainActivity">
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <EditText
            android:id="@+id/input_et"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:hint="请输入信息"
            android:singleLine="true" />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="Java调用JS"
            android:onClick="sendInfoToJs" />
    </LinearLayout>
    <WebView
        android:id="@+id/webView"
        android:layout_width="match_parent"
        android:layout_height="match_parent" />
</LinearLayout>

Activity代码:

public class MainActivity extends AppCompatActivity {
    private WebView webView;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        webView = (WebView) findViewById(R.id.webView);
        webView.setVerticalScrollbarOverlay(true);
        //设置WebView支持JavaScript
        webView.getSettings().setJavaScriptEnabled(true);
        webView.loadUrl("");
        //在js中调用本地java方法
        webView.addJavascriptInterface(new JsInterface(this), "AndroidWebView");
        //添加客户端支持
        webView.setWebChromeClient(new WebChromeClient());
    }
    private class JsInterface {
        private Context mContext;
        public JsInterface(Context context) {
            this.mContext = context;
        }
        //在js中调用window.AndroidWebView.showInfoFromJs(name),便会触发此方法。
        @JavascriptInterface
        public void showInfoFromJs(String name) {
            Toast.makeText(mContext, name, Toast.LENGTH_SHORT).show();
        }
    }
    //在java中调用js代码
    public void sendInfoToJs(View view) {
        String msg = ((EditText) findViewById(R.id.input_et)).getText().toString();
        //调用js中的函数:showInfoFromJava(name)
        webView.loadUrl("javascript:showInfoFromJava('" + msg + "')");
        // webView.loadUrl("javascript:showInfoFromJava()");
    }
}

二 网页代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Android WebView 与 Javascript 交互</title>
</head>
<body>
    <input type="button" value="分享" onclick="f1()">
    <input type="text" id="show"/>
</body>
<script>
    function f1(){
        AndroidWebView.showInfoFromJs("hello");
    }
    function showInfoFromJava(msg){
        document.getElementById("show").value=msg;
        alert(1);
    }
</script>
</html>

注意: android 调用js代码可能会报错如下:

W/WebView(2088): java.lang.Throwable: A WebView method was called on thread 'JavaBridge'. All WebView methods must be called on the same thread.

解决办法:

webView.post(new Runnable() {
    @Override
    public void run() {
        webView.loadUrl("javascript:showInfoFromJava('" + msg + "')");
    }
});