android应用js
http://blog.csdn.net/carson_ho/article/details/64904691
通过 WebViewClient
的方法shouldOverrideUrlLoading ()
回调拦截 url
具体原理:
- Android通过
WebViewClient
的回调方法shouldOverrideUrlLoading ()
拦截 url - 解析该 url 的协议
- 如果检测到是预先约定好的协议,就调用相应方法
即JS需要调用Android的方法
- 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" onclick="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); } } ); } }
转载于:https://www.cnblogs.com/wcLT/p/7845455.html
android应用js相关推荐
- Android 与 JS 的交互 以及 JS与Android 的交互
Android与JS交互以及JS与Android 的交互 是通过WebView互相调用方法 对于Android调用JS代码的方法有2种: 通过WebView的loadUrl() 通过WebView的e ...
- [转]JS调用Android里面的方法,Android调用JS里面的方法
FROM : http://blog.csdn.net/hj563308597/article/details/45197709 Android WebView 在公司Android的开发过程中遇到一 ...
- Android与Js进行交互
Android与JS进行交互主要依靠WebView,webView相当于一个桥梁来沟通两者. Android调用Js: 1.webView的loadurl()方法 互联网页面用:loadUrl(htt ...
- Android开发之android与JS互调 | Android与H5互调(附源码)
我们先看下JS代码: <!DOCTYPE html> <html lang="en"> <head><meta charset=" ...
- android webview js 交互框架,自定义android混合框架开发实践1:实现基础andorid和webview交互...
1. 本地web资源 1.构建assets/web文件夹 2.创建index.html你的html代码 3.使用本地web资源WebView mv = findViewById(...); mv.lo ...
- android的交互方式,Android与js的交互方式
参考 Android:你要的WebView与 JS 交互方式 都在这里了 代码 一.交互方式总起 1.1 Android调用js + WebView.loadUrl("javascript: ...
- WebView的使用之Android与JS通过WebView互调方法
WebView的使用之Android与JS通过WebView互调方法 一.概述: Android与JS通过WebView实现交互,实际上是: Android调用JS的代码: JS调用Android的 ...
- Android开发-WebView中实现Android调用JS JS调用Android 【三】
老早之前就想总结下Webview相关的知识点了,因为互联网大潮中,很多APP都会使用到Webview,像那些不计其数的电商APP,无一例外的使用Webview:或者一些非电商APP中的像广告页面,注册 ...
- android 和 js 之间交互的封装
HybridBridge 项目地址:YouJZ/HybridBridge 简介:android 和 js 之间交互的封装 更多:作者 提 Bug 标签: webview-js-android ...
- android和js交互的代码,Android与JS代码交互
现如今,很多Android APP都要与JS进行交互,而WebView就是Android与JS交互的桥梁,日常中最常见Android和JS交互有:APP注册协议,APP里的文章,APP里的活动页,这都 ...
最新文章
- 9 单元测试中不得不知的概念
- Web 服务器 之 简易WWW服务器的架设
- Maven全局配置文件settings.xml 全解
- 【Android 高性能音频】Oboe 音频流打开后 耳机 / 音箱 插拔事件处理 ( 设置 Oboe 音频设备 ID | setDeviceId 函数原型 | AudioStream 音频流 )
- 于企业而言,Linux 与 Windows 哪个更安全?
- Linux shell 中获取当前目录的方法
- linux压缩、解压操作
- Spark之SparkStreaming数据源
- 微软重新设计 Edge for Android 的用户界面
- poj1811(pollard_rho模板)
- 【手写数字识别】基于matlab知识库手写体数字识别【含Matlab源码 311期】
- 低版本向日葵本机识别码和验证码提取
- 二十一条自动化测试过程中遭遇的问题及解决思路
- 请把西游记倒过来看!
- 海外英语杂志社海外英语杂志社海外英语编辑部2022年第14期目录
- Java 求解自幂数(水仙花数)
- Python的Pexpect详解
- Maven工程报错:No goals have been specified for this build. You must specify a valid lifecycle phase or a
- 在word如何显示左侧的索引目录
- 〖3D激光点云〗激光雷达点云bin文件读取和显示!