js 订阅
JavaScript(简称“JS”) 是一种具有函数优先的轻量级,解释型或即时编译型的高级编程语言。虽然它是作为开发Web页面的脚本语言而出名的,但是它也被用到了很多非浏览器环境中,JavaScript 基于原型编程、多范式的动态脚本语言,并且支持面向对象、命令式和声明式(如函数式编程)风格。 [1]  JavaScript在1995年由Netscape公司的Brendan Eich,在网景导航者浏览器上首次设计实现而成。因为Netscape与Sun合作,Netscape管理层希望它外观看起来像Java,因此取名为JavaScript。但实际上它的语法风格与Self及Scheme较为接近。 [2]  JavaScript的标准是ECMAScript 。截至 2012 年,所有浏览器都完整的支持ECMAScript 5.1,旧版本的浏览器至少支持ECMAScript 3 标准。2015年6月17日,ECMA国际组织发布了ECMAScript的第六版,该版本正式名称为 ECMAScript 2015,但通常被称为ECMAScript 6 或者ES6。 [1] 展开全文
JavaScript(简称“JS”) 是一种具有函数优先的轻量级,解释型或即时编译型的高级编程语言。虽然它是作为开发Web页面的脚本语言而出名的,但是它也被用到了很多非浏览器环境中,JavaScript 基于原型编程、多范式的动态脚本语言,并且支持面向对象、命令式和声明式(如函数式编程)风格。 [1]  JavaScript在1995年由Netscape公司的Brendan Eich,在网景导航者浏览器上首次设计实现而成。因为Netscape与Sun合作,Netscape管理层希望它外观看起来像Java,因此取名为JavaScript。但实际上它的语法风格与Self及Scheme较为接近。 [2]  JavaScript的标准是ECMAScript 。截至 2012 年,所有浏览器都完整的支持ECMAScript 5.1,旧版本的浏览器至少支持ECMAScript 3 标准。2015年6月17日,ECMA国际组织发布了ECMAScript的第六版,该版本正式名称为 ECMAScript 2015,但通常被称为ECMAScript 6 或者ES6。 [1]
信息
原    名
Livescript
软件语言
JavaScript
开发商
Netscape、Mozilla基金会
软件名称
JavaScript
更新时间
2016年4月 [1]
软件版本
ECMAScript 6 [1]
实现功能
人机交互
软件平台
Chrome、IE、Safari、Firefox等 [3]
语言类型
脚本语言
javascript组成部分
ECMAScript,描述了该语 言的语法和基本对象。 [4]  文档对象模型(DOM),描述处理网页内容的方法和接口。 [4]  浏览器对象模型(BOM),描述与浏览器进行交互的方法和接口。 [4] 
收起全文
精华内容
参与话题
问答
  • 全面学习vue.js配置,es6命令,解构赋值,symbol类型,set,weakSet,Map,WeakMap,Iterator遍历器,Generator函数结构,Promise对象,async函数,箭头函数,class类,proxy代理,Decorator修饰器,model模块,二进制...
  • Node.js 是什么?Node.js与JavaScript的区别是什么?

    万次阅读 多人点赞 2019-06-06 23:37:49
    node.js是什么?Node.js是一个Javascript运行环境(runtime)。Node.js与JavaScript的区别是什么?本质:     Javascript是一种web前端语言,主要用于web开发中,由浏览器解析执行  &...

    node.js是什么?Node.js是一个Javascript运行环境(runtime)。Node.js与JavaScript的区别是什么?本质:     Javascript是一种web前端语言,主要用于web开发中,由浏览器解析执行     Node.js是一个可以快速构建网络服务及应用的平台,是用Javascript语言构建的服务平台,可用于后端建立服务器区别:      Javascript 主要应用前端    是编程语言    客户端编程语言(需要浏览器的javascript解释器进行解释执行)        node.js    主要应用后端      1个平台        运行环境(一个基于Chrome JavaScript运行时建立的平台,它是对Google V8引擎进行了封装的运行环境)简单的说node.js就是把浏览器的解释器封装起来作为服务器运行平台,用类似javascript的结构语法进行编程,在node.js上运行。
    Node.js的优点?Node.js的缺点?
     优点:1.事件驱动2.异步编程3.非阻塞模式的IO4.轻量高效缺点:1.可靠性低2.单进程,单线程,只支持单核cpu,不能充分的利用多核cpu服务器。一旦这个进程崩掉,那么整个web服务就崩掉了。Node.js适用场景?Node.js不适用的场景?
    适用场景:1.JSON APIL ——构建一个Rest/JSON API服务,node.js可以充分发挥其非堵塞IO模型以及javascript对JSON的功能支持2.单页面、多Ajax请求应用——前端有大量的异步请求,需要服务器后端有极高的响应速度3.基于node.js开发Unix命令行工具——node.js可以大量产生子进程,并以流的方式输出4.流式数据——传统的web应用,通常会将HTTP 请求喝响应看成是原子事件。而node.js会充分利用流式数据这个特点,构建非常酷的应用不适用场景:cpu使用率较重、io使用率较轻的应用Node.js的基本语法
    基本语法与 javascript 一样这里我们使用exports导出一个函数,然后再另一文件中通过require导入入一个模块例如 :在 a.js 中写一个函数var hello=function(){    console.log(‘hello’)}export.hello=hello;在 b.js 中 需要用hello这个函数var a=require(‘a’);a.hello()单线程
    Node的设计中就是将耗时长的操作代理给操作系统或者多线程,这部分操作就是磁盘I/O和网络I/O。所以Node中异步非常常见,因为要将耗时的操作从主线程上脱离。但是这些I/O线程并不怎么耗费CPU。无法利用多核CPU是指Node的主线程无法利用上硬件上额外的CPU。这就需要用到cluster来在机器上启动多个Node实例,将额外的CPU也使用上。异步 IO
    事件驱动REPLREPL(Read-Eval-Print Loop) 中文的话有翻译成“交互式解释器”或“交互式编程环境”的。

    作者:cici_Gao
    链接:https://www.jianshu.com/p/21d3130ca059
    来源:简书
    简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

    展开全文
  • JavaScript中使用JSON解析包解析JSON --- json.js 和 json2.js 以及 json3.js的使用区别 JSON官方(http://www.json.org/)提供了一个json.js,json.js是JSON官方提供的在JavaScript中解析JSON的js包,json.js、...

    JavaScript中使用JSON解析包解析JSON --- json.js 和 json2.js 以及 json3.js的使用区别

    JSON官方(http://www.json.org/)提供了一个json.js,json.js是JSON官方提供的在JavaScript中解析JSON的js包,json.js、json2.js、json3.js是从旧到新的三个版本,现在一般使用json3.js。

     

    JSON官方(http://www.json.org/)提供了一个json3.js,提供了JSON的序列化和反序列化方法,可以将一个JSON对象转换成JSON字符串,也可以将一个JSON字符串转换成一个JSON对象。这样ie8(兼容模式),ie7和ie6就可以支持JSON对象以及其stringify()和parse()方法; 

    JSON 3是与各种JavaScript平台兼容的现代JSON实现,包括Internet Explorer 6,Opera 7,Safari 2和Netscape 6.当前版本是3.3.2。

    可以在 https://bestiejs.github.io/json3/ 获取到这个js. 现在一般用json3.js

    json3.js本地下载地址:http://download.csdn.net/download/chenchunlin526/10170731

    使用方法:

    使用该js包,需要在页面引入json3.js文件。

    JSON.parse(jsonstr); //可以将JSON字符串反序列化成JSON对象 

    JSON.stringify(jsonobj); //可以将JSON对象序列化成JSON对符串 

     

    ① JSON.parse(jsonstr); //可以将JSON字符串反序列化成JSON对象 

    举例:

    程序清单3:

    $(document).ready(function(){
    
        var data = '[{"name":"chunlynn","age": 27,"qq":"277539687"},
    {"name":"linda" ,"age": 25,"qq":"123456789"}]';  //同上放在一行
    
        var jsondata = JSON.parse(data);
        console.info(jsondata);
        console.info("姓名:"+jsondata[0].name);
        console.info("年龄:"+jsondata[0].age);
        console.info("qq:"+jsondata[0].qq);
    
        console.info("qq:"+jsondata[0]["qq"]);
        console.info(jsondata instanceof Array); //true
        console.info("jsondata[0]的JS类型: "+ typeof jsondata[0]);
        console.info("age的JS类型: "+ typeof jsondata[0].age); //number
        console.info("qq的JS类型: "+ typeof jsondata[0].qq); //string
    
    });

    结果:

     

     

    ② JSON.stringify(jsonobj); //可以将JSON对象序列化成JSON对符串 

    程序清单4:

    $(document).ready(function(){
        // JS对象,数组对象
        var data = [{"name":"chunlynn","age":27,"qq":"277539687"},
    {"name":"linda" ,"age":25,"qq":"123456789"}];   //同上行放在一行
    
        console.info("data的JS类型: "+ typeof data);
    
        var jsondata = JSON.stringify(data); //将JSON对象序列化为JSON字符串
        console.info(jsondata);
        console.info("jsondata的JS类型: "+ typeof jsondata);
    
    });

     

    结果:

     

    更多的使用方法如下:

    <%@ page language="java" contentType="text/html; charset=utf-8"  pageEncoding="utf-8"%>
    
    <html>
    
    <head>
    <script src="https://cdn.bootcss.com/json3/3.3.2/json3.js"></script>
    <script src="https://cdn.bootcss.com/jquery/1.11.2/jquery.js"></script>
    </head>
    
    <body>
    <script type="text/javascript">
    $(document).ready(function(){
    
        //双引号转义
        //var data = "[{\"name\":\"chunlynn\",\"age\": 27,\"qq\":\"277539687\"},{"name":"linda","age":25,"qq":"556677"}]"; 
    
        //单引号放在最外面,就不用转义了
        var data = '[{"name":"chunlynn","age":27,"qq":"277539687"},{"name":"linda" ,"age":25,"qq":"556677"}]';  
    
        var jsondata = JSON.parse(data);
        console.info(jsondata);
        console.info("姓名:"+jsondata[0].name);
        console.info("年龄:"+jsondata[0].age);
        console.info("qq:"+jsondata[0].qq);
        console.info(jsondata instanceof Array);
    
        console.info("jsondata[0]的JS类型: "+ typeof jsondata[0]);
        console.info("age的JS类型: "+ typeof jsondata[0].age);
        console.info("qq的JS类型: "+ typeof jsondata[0].qq);
        var jsondata2 = JSON.parse(data, function (key, value) {
            if (typeof value == "number") {
              value = value+1000;
            }  
    
            return value;
    
        });
    
        console.info("姓名2:"+jsondata2[0].name);
        console.info("年龄2:"+jsondata2[0].age);
        console.info("qq2:"+jsondata2[0].qq);
    
    });
    
    </script>
    </body>
    </html> 


    结果:

     

    资源下载:

    【1】json3.js 【JS / JavaScript 中解析JSON的js包,JSON官方的JSON解析包】-CSDN下载
    http://download.csdn.net/download/chenchunlin526/10170731

    更多的关于JavaScript中解析JSON的方法请参考如下博文:

    【1】JavaScript中解析JSON --- JSON.parse()、JSON.stringify()以及$.parseJSON()使用详解 
    http://blog.csdn.net/chenchunlin526/article/details/78850924

     

     

    展开全文
  • JS是什么意思?有什么用?

    万次阅读 2019-12-23 09:27:05
    一:JS是什么意思 Javascript简称jsjs是一种脚本语言,是不需要进行编译的,也是浏览器中的一部分,经常用在web客户端脚本语言,主要是用来给html增加动态功能。 二:js有什么用 一般情况下,html页面主要是用于...

    一:JS是什么意思

    Javascript简称js,js是一种脚本语言,是不需要进行编译的,也是浏览器中的一部分,经常用在web客户端脚本语言,主要是用来给html增加动态功能。

    二:js有什么用

    一般情况下,html页面主要是用于静态内容的显示,但是在实际中,页面很少的静态的,现在是网站都会有一些表单和幻灯片,这些都是使用js来进行交互,其实还有一些语言在可以编写脚本,实际上都是js。

    js主要是用web的开发,可以给网站添加各种各样的动态效果,让网页更加美观。

    三:js的组成部分
    js核心:ECMAScrept,DOM,BOM.
    js的组成是有三部分组成,包括基本的语法和文档对象模型,以及浏览器对象模型。
    四:Javascript的特点

    1.js是面对对象的,我们可以创建对象和使用现有的对象。

    2.js是不需要编译就能执行的脚本语言,并且是在运行中,直接进行解释。

    3.js是不需任何的操作系统,只要有浏览器支持就可以,并且同时支持多种浏览器运行。

    4.js对数据类型是不需要任何要求的,采用的方式是弱类型。

    展开全文
  • Android:你要的WebView与 JS 交互方式 都在这里了

    万次阅读 多人点赞 2017-03-22 09:19:45
    前言 现在很多App里都内置了Web网页(Hybrid App),比如说很多电商平台,淘宝...今天我将全面介绍Android通过WebView与JS交互的全面方式 阅读本文前请先阅读:Android开发:最全面、最易懂的Webview详解 ...

    前言

    • 现在很多App里都内置了Web网页(Hybrid App),比如说很多电商平台,淘宝、京东、聚划算等等,如下图

    京东首页

    • 上述功能是由Android的WebView实现的,其中涉及到Android客户端与Web网页交互的实现
    • 今天我将全面介绍Android通过WebView与JS交互的全面方式

    阅读本文前请先阅读:Android开发:最全面、最易懂的Webview详解


    #目录

    目录


    1. 交互方式总结

    Android与JS通过WebView互相调用方法,实际上是:

    • Android去调用JS的代码
    • JS去调用Android的代码

    二者沟通的桥梁是WebView

    对于Android调用JS代码的方法有2种:

    1. 通过WebViewloadUrl()
    2. 通过WebViewevaluateJavascript()

    对于JS调用Android代码的方法有3种:

    1. 通过WebViewaddJavascriptInterface()进行对象映射
    2. 通过 WebViewClientshouldOverrideUrlLoading ()方法回调拦截 url
    3. 通过 WebChromeClientonJsAlert()onJsConfirm()onJsPrompt()方法回调拦截JS对话框alert()confirm()prompt() 消息

    2. 具体分析

    2.1 Android通过WebView调用 JS 代码

    对于Android调用JS代码的方法有2种:

    1. 通过WebViewloadUrl()
    2. 通过WebViewevaluateJavascript()

    方式1:通过WebViewloadUrl()

    • 实例介绍:点击Android按钮,即调用WebView JS(文本名为javascript)中callJS()
    • 具体使用:

    步骤1:将需要调用的JS代码以.html格式放到src/main/assets文件夹里

    1. 为了方便展示,本文是采用Andorid调用本地JS代码说明;
    2. 实际情况时,Android更多的是调用远程JS代码,即将加载的JS代码路径改成url即可

    需要加载JS代码:javascript.html

    // 文本名:javascript
    <!DOCTYPE html>
    <html>
    
       <head>
          <meta charset="utf-8">
          <title>Carson_Ho</title>
          
    // JS代码
         <script>
    // Android需要调用的方法
       function callJS(){
          alert("Android调用了JS的callJS方法");
       }
    </script>
    
       </head>
    
    </html>
    

    步骤2:在Android里通过WebView设置调用JS代码

    Android代码:MainActivity.java

    注释已经非常清楚

     public class MainActivity extends AppCompatActivity {
    
        WebView mWebView;
        Button button;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            mWebView =(WebView) findViewById(R.id.webview);
    
            WebSettings webSettings = mWebView.getSettings();
    
            // 设置与Js交互的权限
            webSettings.setJavaScriptEnabled(true);
            // 设置允许JS弹窗
            webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
    
            // 先载入JS代码
            // 格式规定为:file:///android_asset/文件名.html
            mWebView.loadUrl("file:///android_asset/javascript.html");
    
            button = (Button) findViewById(R.id.button);
    
    
            button.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    // 通过Handler发送消息
                    mWebView.post(new Runnable() {
                        @Override
                        public void run() {
    
                            // 注意调用的JS方法名要对应上
                            // 调用javascript的callJS()方法
                            mWebView.loadUrl("javascript:callJS()");
                        }
                    });
                    
                }
            });
    
            // 由于设置了弹窗检验调用结果,所以需要支持js对话框
            // webview只是载体,内容的渲染需要使用webviewChromClient类去实现
            // 通过设置WebChromeClient对象处理JavaScript的对话框
            //设置响应js 的Alert()函数
            mWebView.setWebChromeClient(new WebChromeClient() {
                @Override
                public boolean onJsAlert(WebView view, String url, String message, final JsResult result) {
                    AlertDialog.Builder b = new AlertDialog.Builder(MainActivity.this);
                    b.setTitle("Alert");
                    b.setMessage(message);
                    b.setPositiveButton(android.R.string.ok, new DialogInterface.OnClickListener() {
                        @Override
                        public void onClick(DialogInterface dialog, int which) {
                            result.confirm();
                        }
                    });
                    b.setCancelable(false);
                    b.create().show();
                    return true;
                }
    
            });
    
    
        }
    }
    

    效果图

    特别注意:JS代码调用一定要在 onPageFinished() 回调之后才能调用,否则不会调用。

    onPageFinished()属于WebViewClient类的方法,主要在页面加载结束时调用

    方式2:通过WebViewevaluateJavascript()

    • 优点:该方法比第一种方法效率更高、使用更简洁。
    1. 因为该方法的执行不会使页面刷新,而第一种方法(loadUrl )的执行则会。
    2. Android 4.4 后才可使用
    • 具体使用
    // 只需要将第一种方法的loadUrl()换成下面该方法即可
        mWebView.evaluateJavascript("javascript:callJS()", new ValueCallback<String>() {
            @Override
            public void onReceiveValue(String value) {
                //此处为 js 返回的结果
            }
        });
    }
    

    2.1.2 方法对比

    方式对比图

    2.1.3 使用建议

    两种方法混合使用,即Android 4.4以下使用方法1,Android 4.4以上方法2

    // Android版本变量
    final int version = Build.VERSION.SDK_INT;
    // 因为该方法在 Android 4.4 版本才可使用,所以使用时需进行版本判断
    if (version < 18) {
        mWebView.loadUrl("javascript:callJS()");
    } else {
        mWebView.evaluateJavascript("javascript:callJS()", new ValueCallback<String>() {
            @Override
            public void onReceiveValue(String value) {
                //此处为 js 返回的结果
            }
        });
    }
    

    2.2 JS通过WebView调用 Android 代码

    对于JS调用Android代码的方法有3种:

    1. 通过WebViewaddJavascriptInterface()进行对象映射
    2. 通过 WebViewClientshouldOverrideUrlLoading ()方法回调拦截 url
    3. 通过 WebChromeClientonJsAlert()onJsConfirm()onJsPrompt()方法回调拦截JS对话框alert()confirm()prompt() 消息

    2.2.1 方法分析

    方式1:通过 WebViewaddJavascriptInterface()进行对象映射

    步骤1:定义一个与JS对象映射关系的Android类:AndroidtoJs

    AndroidtoJs.java(注释已经非常清楚)

    // 继承自Object类
    public class AndroidtoJs extends Object {
    
        // 定义JS需要调用的方法
        // 被JS调用的方法必须加入@JavascriptInterface注解
        @JavascriptInterface
        public void hello(String msg) {
            System.out.println("JS调用了Android的hello方法");
        }
    }
    

    步骤2:将需要调用的JS代码以.html格式放到src/main/assets文件夹里

    需要加载JS代码:javascript.html

    <!DOCTYPE html>
    <html>
       <head>
          <meta charset="utf-8">
          <title>Carson</title>  
          <script>
             
            
             function callAndroid(){
            // 由于对象映射,所以调用test对象等于调用Android映射的对象
                test.hello("js调用了android中的hello方法");
             }
          </script>
       </head>
       <body>
          //点击按钮则调用callAndroid函数
          <button type="button" id="button1" "callAndroid()"></button>
       </body>
    </html>
    

    步骤3:在Android里通过WebView设置Android类与JS代码的映射

    详细请看注释

    public class MainActivity extends AppCompatActivity {
    
        WebView mWebView;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            mWebView = (WebView) findViewById(R.id.webview);
            WebSettings webSettings = mWebView.getSettings();
    
            // 设置与Js交互的权限
            webSettings.setJavaScriptEnabled(true);
    
            // 通过addJavascriptInterface()将Java对象映射到JS对象
            //参数1:Javascript对象名
            //参数2:Java对象名
            mWebView.addJavascriptInterface(new AndroidtoJs(), "test");//AndroidtoJS类对象映射到js的test对象
    
            // 加载JS代码
            // 格式规定为:file:///android_asset/文件名.html
            mWebView.loadUrl("file:///android_asset/javascript.html");
    
    

    效果图

    特点

    • 优点:使用简单

    仅将Android对象和JS对象映射即可

    方式2:通过 WebViewClient 的方法shouldOverrideUrlLoading ()回调拦截 url

    • 具体原理:
    1. Android通过 WebViewClient 的回调方法shouldOverrideUrlLoading ()拦截 url
    2. 解析该 url 的协议
    3. 如果检测到是预先约定好的协议,就调用相应方法

    即JS需要调用Android的方法

    • 具体使用:
      步骤1:在JS约定所需要的Url协议
      JS代码:javascript.html

    以.html格式放到src/main/assets文件夹里

    <!DOCTYPE html>
    <html>
    
       <head>
          <meta charset="utf-8">
          <title>Carson_Ho</title>
          
         <script>
             function callAndroid(){
                /*约定的url协议为:js://webview?arg1=111&arg2=222*/
                document.location = "js://webview?arg1=111&arg2=222";
             }
          </script>
    </head>
    
    <!-- 点击按钮则调用callAndroid()方法  -->
       <body>
         <button type="button" id="button1" "callAndroid()">点击调用Android代码</button>
       </body>
    </html>
    

    当该JS通过Android的mWebView.loadUrl("file:///android_asset/javascript.html")加载后,就会回调shouldOverrideUrlLoading (),接下来继续看步骤2:

    步骤2:在Android通过WebViewClient复写shouldOverrideUrlLoading ()

    MainActivity.java

    public class MainActivity extends AppCompatActivity {
    
        WebView mWebView;
    //    Button button;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            mWebView = (WebView) findViewById(R.id.webview);
    
            WebSettings webSettings = mWebView.getSettings();
    
            // 设置与Js交互的权限
            webSettings.setJavaScriptEnabled(true);
            // 设置允许JS弹窗
            webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
    
            // 步骤1:加载JS代码
            // 格式规定为:file:///android_asset/文件名.html
            mWebView.loadUrl("file:///android_asset/javascript.html");
    
    
    // 复写WebViewClient类的shouldOverrideUrlLoading方法
    mWebView.setWebViewClient(new WebViewClient() {
                                          @Override
                                          public boolean shouldOverrideUrlLoading(WebView view, String url) {
    
                                              // 步骤2:根据协议的参数,判断是否是所需要的url
                                              // 一般根据scheme(协议格式) & authority(协议名)判断(前两个参数)
                                              //假定传入进来的 url = "js://webview?arg1=111&arg2=222"(同时也是约定好的需要拦截的)
    
                                              Uri uri = Uri.parse(url);                                 
                                              // 如果url的协议 = 预先约定的 js 协议
                                              // 就解析往下解析参数
                                              if ( uri.getScheme().equals("js")) {
    
                                                  // 如果 authority  = 预先约定协议里的 webview,即代表都符合约定的协议
                                                  // 所以拦截url,下面JS开始调用Android需要的方法
                                                  if (uri.getAuthority().equals("webview")) {
    
                                                     //  步骤3:
                                                      // 执行JS所需要调用的逻辑
                                                      System.out.println("js调用了Android的方法");
                                                      // 可以在协议上带有参数并传递到Android上
                                                      HashMap<String, String> params = new HashMap<>();
                                                      Set<String> collection = uri.getQueryParameterNames();
    
                                                  }
    
                                                  return true;
                                              }
                                              return super.shouldOverrideUrlLoading(view, url);
                                          }
                                      }
            );
       }
            }
    
    

    效果图

    特点

    • 优点:不存在方式1的漏洞;
    • 缺点:JS获取Android方法的返回值复杂。

    如果JS想要得到Android方法的返回值,只能通过 WebView 的 loadUrl ()去执行 JS 方法把返回值传递回去,相关的代码如下:

    // Android:MainActivity.java
    mWebView.loadUrl("javascript:returnResult(" + result + ")");
    
    // JS:javascript.html
    function returnResult(result){
        alert("result is" + result);
    }
    

    #方式3:通过 WebChromeClientonJsAlert()onJsConfirm()onJsPrompt()方法回调拦截JS对话框alert()confirm()prompt() 消息

    在JS中,有三个常用的对话框方法:

    Paste_Image.png

    方式3的原理:Android通过 WebChromeClientonJsAlert()onJsConfirm()onJsPrompt()方法回调分别拦截JS对话框
    (即上述三个方法),得到他们的消息内容,然后解析即可。

    下面的例子将用**拦截 JS的输入框(即prompt()方法)**说明 :

    1. 常用的拦截是:拦截 JS的输入框(即prompt()方法)
    2. 因为只有prompt()可以返回任意类型的值,操作最全面方便、更加灵活;而alert()对话框没有返回值;confirm()对话框只能返回两种状态(确定 / 取消)两个值

    步骤1:加载JS代码,如下:
    javascript.html

    以.html格式放到src/main/assets文件夹里

    <!DOCTYPE html>
    <html>
       <head>
          <meta charset="utf-8">
          <title>Carson_Ho</title>
          
         <script>
            
    	function clickprompt(){
        // 调用prompt()
        var result=prompt("js://demo?arg1=111&arg2=222");
        alert("demo " + result);
    }
    
          </script>
    </head>
    
    <!-- 点击按钮则调用clickprompt()  -->
       <body>
         <button type="button" id="button1" "clickprompt()">点击调用Android代码</button>
       </body>
    </html>
    

    当使用mWebView.loadUrl("file:///android_asset/javascript.html")加载了上述JS代码后,就会触发回调onJsPrompt(),具体如下:

    1. 如果是拦截警告框(即alert()),则触发回调onJsAlert()
    2. 如果是拦截确认框(即confirm()),则触发回调onJsConfirm()

    步骤2:在Android通过WebChromeClient复写onJsPrompt()

    public class MainActivity extends AppCompatActivity {
    
        WebView mWebView;
    //    Button button;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            mWebView = (WebView) findViewById(R.id.webview);
    
            WebSettings webSettings = mWebView.getSettings();
    
            // 设置与Js交互的权限
            webSettings.setJavaScriptEnabled(true);
            // 设置允许JS弹窗
            webSettings.setJavaScriptCanOpenWindowsAutomatically(true);
    
    // 先加载JS代码
            // 格式规定为:file:///android_asset/文件名.html
            mWebView.loadUrl("file:///android_asset/javascript.html");
    
    
            mWebView.setWebChromeClient(new WebChromeClient() {
                                            // 拦截输入框(原理同方式2)
                                            // 参数message:代表promt()的内容(不是url)
                                            // 参数result:代表输入框的返回值
                                            @Override
                                            public boolean onJsPrompt(WebView view, String url, String message, String defaultValue, JsPromptResult result) {
                                                // 根据协议的参数,判断是否是所需要的url(原理同方式2)
                                                // 一般根据scheme(协议格式) & authority(协议名)判断(前两个参数)
                                                //假定传入进来的 url = "js://webview?arg1=111&arg2=222"(同时也是约定好的需要拦截的)
    
                                                Uri uri = Uri.parse(message);
                                                // 如果url的协议 = 预先约定的 js 协议
                                                // 就解析往下解析参数
                                                if ( uri.getScheme().equals("js")) {
    
                                                    // 如果 authority  = 预先约定协议里的 webview,即代表都符合约定的协议
                                                    // 所以拦截url,下面JS开始调用Android需要的方法
                                                    if (uri.getAuthority().equals("webview")) {
    
                                                        //
                                                        // 执行JS所需要调用的逻辑
                                                        System.out.println("js调用了Android的方法");
                                                        // 可以在协议上带有参数并传递到Android上
                                                        HashMap<String, String> params = new HashMap<>();
                                                        Set<String> collection = uri.getQueryParameterNames();
    
                                                        //参数result:代表消息框的返回值(输入值)
                                                        result.confirm("js调用了Android的方法成功啦");
                                                    }
                                                    return true;
                                                }
                                                return super.onJsPrompt(view, url, message, defaultValue, result);
                                            }
    
    // 通过alert()和confirm()拦截的原理相同,此处不作过多讲述
    
                                            // 拦截JS的警告框
                                            @Override
                                            public boolean onJsAlert(WebView view, String url, String message, JsResult result) {
                                                return super.onJsAlert(view, url, message, result);
                                            }
    
                                            // 拦截JS的确认框
                                            @Override
                                            public boolean onJsConfirm(WebView view, String url, String message, JsResult result) {
                                                return super.onJsConfirm(view, url, message, result);
                                            }
                                        }
            );
    
    
                }
    
            }
    

    效果图

    2.2.2 三种方式的对比 & 使用场景

    示意图


    3. 总结

    • 本文主要对Android通过WebView与JS的交互方式进行了全面介绍

    示意图


    请帮顶和评论点赞!因为你们的赞同/鼓励是我写作的最大动力!


    欢迎关注carson_ho的微信公众号

    示意图

    示意图

    展开全文
  • 解决eclipse编辑jsp、js文件时,经常出现卡死的问题

    万次阅读 多人点赞 2019-07-31 19:20:50
    使用Eclipse编辑jsp、js文件时,经常出现卡死现象,解决方法如下: 1、取消验证 windows–>perferences–>validation 把 除了manual 下面的全部点掉,build下只留 classpath dependency Validator。 其实...
  • javaScript-如何引入js代码

    千次阅读 热门讨论 2019-08-20 20:37:52
    javaScript-如何引入js代码 直接po代码和截图 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>js01-如何引入js代码</title> <script type="text/...
  • JS Array.slice 截取数组的实现方法

    万次阅读 2018-08-07 18:10:48
    这篇文章主要介绍了JS Array.slice 截取数组的实现方法,因为我们需要控制一下长度,需要的朋友可以参考下 slice定义和用法 slice() 方法可从已有的数组中返回选定的元素。 语法 arrayObject.slice(start,end) ...
  • js 实现纯前端将数据导出excel两种方式,亲测有效

    万次阅读 多人点赞 2018-05-23 14:33:27
    由于项目需要,需要在不调用后台接口的情况下,将json数据导出到excel表格,参考了好多资料以及很多大佬写的博客终于实现,兼容chrome没问题,其他还没有测试过,这边介绍两种实现方式,并附上代码和gif动图,博主...
  • js、javascript页面获取后台传过来的值!
  • js格式化数字

    万次阅读 2018-06-11 23:47:51
    今天遇到这么个需求,觉得很有意思,分享给大家。 某个div内需要将后台返回的数字格式化显示到页面上,怎么叫格式呢,就是每三位就加个逗号。 然后我简单实现了一下 function parseNum(num) { ...
  • JS之正则表达式之邮箱的验证

    万次阅读 多人点赞 2018-08-01 10:19:44
    &lt;!DOCTYPE html&gt; &lt;html lang="zh-CN"&gt; &lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;title&gt;Document&...input t
  • JS实现图片轮播效果(自动和手动)

    万次阅读 多人点赞 2018-05-30 16:45:06
    本次轮播效果图如下:具有以下功能:1.自动播放(鼠标进入显示区域时停止播放) 2.左右焦点切换 3.底下小按钮切换以下为实现代码:首先是html代码:&lt;!DOCTYPE html&gt; &...最简单的轮播效果&
  • JS生成 UUID的四种方法

    万次阅读 2016-08-22 21:46:54
    全局唯一标识符(GUID,Globally Unique Identifier)也称作 UUID(Universally Unique IDentifier) 。 GUID是一种由算法生成的二进制长度为128位的数字标识符。GUID 的格式为“xxxxxxxx-xxxx-xxxx-xxxx-...
  • js之间的互相引用踩坑记录

    万次阅读 2020-07-07 05:38:23
    而我这里的api.js引用来其他封装的js文件,当时用的是引用的是 ajaxUtils.js 在es6中实际上.js可以不写,但是这样在浏览器中会导致404错误,浏览器下载不到对应的js文件导致报错 import ajax from "./ajaxUtils"; ...
  • Node.js的卸载

    万次阅读 多人点赞 2019-06-21 09:17:02
    VUE项目使用iView组件在控制面板-...确保node.js没有在后台运行的情况下,进行卸载,可做重启操作后,在到控制面板中找到node.js进行卸载 卸载后 到文件夹中进行进一步的删除 C:\Program Files (x86)\Nodejs C:\Pr...
  • videojs中文文档详解

    万次阅读 多人点赞 2018-07-05 10:31:23
    最近弄视频直播,网上没有全面的中文文档,只好自己整理了一份详细的api。Video.js是一款web视频播放器,支持...引入video.js和video-js.css,使用video标签就像下面这样: &amp;lt;video id=&quot;e...
  • JS向数组添加元素,插入数据

    万次阅读 多人点赞 2018-07-22 15:00:10
    js中对于数组的操作很常见,下面记录一下js向数组添加元素的方法。 let myArray=[11,22,33]; console.log('原数组:',myArray); myArray.push(44,55); console.log('用push在数组后面插入元素:',myArray); ...
  • js实现replaceAll方法

    万次阅读 2018-10-21 22:07:00
    js本来有replace方法,请看w3school的说明: replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。 语法: stringObject.replace(regexp/substr,replacement) 第一个参数...
  • pdf.js使用方法

    万次阅读 多人点赞 2018-06-08 14:46:32
    项目中 显示 pdf 的功能,浏览过不少的技术帖,都不太理想,花了点时间研究了下pdf.js正确使用方法,总结下:1.防止自己忘记 2.工作留有痕迹 3.供大家参考借鉴 pdf.js: 将 PDF 文件解析后生成一张 .png 图片,利用 ...
  • JS 生成二维码实现(qrcode.js

    万次阅读 2018-04-24 10:40:10
    qrcode.js源码地址: https://github.com/jeromeetienne/jquery-qrcode 使用 页面引入QRCode.js和JQuery.js &amp;amp;lt;script src=&amp;quot;../static/jquery-3.2.1.min.js&amp;quot;/&...
  • jquery-form.js 源码

    万次下载 热门讨论 2014-04-16 17:37:50
    异步提交表单和上传文件jquery-form.js
  • Three.js 中文文档和在线演示实例

    万次阅读 多人点赞 2016-06-16 19:40:24
    Three.js是当下最流行的网页3D渲染JS引擎,其主要是对WebGL编程以面向对象方式进行的封装。 踏得网专注于HTML5技术生态链的资源开发,鉴于网络上Three.js方面的资料比较散乱,且良莠不齐, 因此我们把Three.js的官方...
  • JS实现延时3秒刷新

    万次阅读 2018-11-01 17:56:43
    setTimeout(function (){ window.location.reload(); }, 3000);
  • java爬虫,爬取js渲染完成后的网页

    万次阅读 2020-08-13 05:16:44
    在爬取bilibili的时候发现通过一般的客户端获取网页内容,会发现网页全是乱码,爬取百度等网页不会出现乱码,在我排除编码问题后,推测bilibili的网页采用js加密了网页。 使用 第一步加入maven依赖 一个是必要的...
  • js中的foreach用法

    万次阅读 多人点赞 2019-06-10 22:30:30
    forEach() 方法对数组的每个元素执行一次提供的函数。 var array = ['a', 'b', 'c']; array.forEach(function(element) { console.log(element); }); ...forEach() 方法对数组的每个元素执行一次提供的函数。...
  • JS日期格式化转换方法

    万次阅读 多人点赞 2018-04-21 17:31:21
    1. 将日期转换为指定的格式:比如转换成 年月日时分秒 这种格式:yyyy-MM-dd hh:mm:ss 或者 yyyy-MM-dd。当然是网上的方法,只是总结下。 可以为Date原型添加如下的方法: Date.prototype.format = function(fmt)...
  • JS语法之:map()方法

    万次阅读 多人点赞 2019-01-14 17:32:02
    MDN web docs上面说: map() 方法创建一个新数组,其结果是该数组中的每个元素都调用一个提供的函数后返回的结果。 并举了个例子: var array1 = [1,4,9,16];...const map1 = array1.map(x =>...
  • 在一个JS文件中引用另一个JS文件 方法一 在调用文件的顶部加入下例代码: document.write(””); (注:有时你引用的文件还可能需要引用其他的js,我们需要将需要的那个js文件也以同样的方法引用进来) 方法二 通过...
  • 如何创建一个JS文件以及调用JS文件

    万次阅读 2018-09-24 22:32:43
    建立一个txt文件更改后缀名为js,建立完成... 二、JAVA编辑器 1.首先在的WebContent或者任何一个资源文件夹下建立一个JS文件夹。 步骤:点击WebContent,按Ctrl + N,搜索文件夹,创建一个名为js文件夹。 2.然后...

空空如也

1 2 3 4 5 ... 20
收藏数 1,450,942
精华内容 580,376
关键字:

js