前言

昨天路过公司外面花园时候,不知觉腊梅已经开花了,才发觉春天来了。来城市生活这几年,完全忘记了时令的交替,只知道冷了加衣服,热了脱衣服。好久没感受到春天的气息了,内心泛起一丝惆怅。城市的生活总是那么匆忙,多了一分烦躁,少了一分宁静。

那金黄色的油菜花,粉色的桃花,白色的李子花樱花 … 儿时 …

WebView简介

纯原生app开发,时间成本太高,现在市面上已经很多混合式开发app。那么什么是混合式?指的是在我们的页面中嵌入html网页。Android当中给我们提供了WebView实现这一功能。

有关WebView的一些常见方法,我这里就不再讲解,网上这部分资源太多。接着我们来看看以下几个案列。

参考文献:

WebView详解与简单实现Android与H5互调

案例一header

直接上需求效果图:

需求:WebView添加headerh5读取头部,并且隐藏底部菜单栏。

需要添加的header数据:ECR-APP:android

我们平时大多数情况使用的是loadUrl(String url)加载方法,下面我们来看另一个loadUrl构造方法。

loadUrl(String url, Map<String, String> additionalHttpHeaders)

参数additionalHttpHeaders字面上的意思是:额外的http头部信息。这个方法是Android 2.2 (也就是API 8),WebView新增加了一个接口方法,就是为了便于我们加载网页同时又可以发送HTTP头信息的。

看看具体的使用:

    HashMap<String, String> header = new HashMap<>();header.put("ECR-APP", "android");mWebView.loadUrl("http://m.test.366ec.net/Default2c.aspx",header);

马上运行效验一下:

网页上底部的菜单已经去掉了。

案例二cookie

cookie用于记录用户登录信息,用户下次进入需要登录的界面不再需要重复登录。

先看看需求:

会一直出现登录界面。那么怎么解决多次登录问题?WebView会将加载的url通过http请求传输到服务器。那么Cookie信息会通过header传递过去。

设置cookie代码如下:

    private void syncCookieToWebView(String url, List<String> cookies) {CookieSyncManager.createInstance(this);CookieManager cm = CookieManager.getInstance();cm.setAcceptCookie(true);if (cookies != null) {for (String cookie : cookies) {cm.setCookie(url, cookie);//注意端口号和域名,这种方式可以同步所有cookie,包括sessionid}}if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP_MR1) {CookieManager.getInstance().flush();} else {CookieSyncManager.getInstance().sync();}}

以下是调用代码:

    List<String> cookies = new ArrayList<>();//键值对类型  用等号("=")连接    具体根据后台给定cookies.add("StoreManagerTicket=" + "加密token");//根据后台协商而定syncCookieToWebView("加载的地址", cookies);

CookieManager会将这个Cookie存入该应用程序/data/data/databases/目录下的webviewCookiesChromium.db数据库的cookies表中。打开网页,WebView从数据库中读取该cookie值,放到http请求的头部,传递到服务器。

运行一下,看看还会出现多次登录的问题吗?

跳转正常,没有出现多次登录的问题。

案例三注入js

不知道你在项目中遇到这样的场景没有?手机端与h5交互,提供数据支持。如调本地相机,获取到的图片上传到网页;调用定位返回地址给网页;调用二维码扫描界面返回扫描结果等等。

如下,有这样一个场景,网页上有【扫描】图标,点击打开手机扫描界面,扫描成功后上传扫描结果。那么在手机端一般会有如下方法:

JsOpenScanFunction(String callbackFunction)

参数callbackFunction表示扫描成功后webview.load调用的方法并且只有一个参数(扫描结果)。

一般前端h5会这样进行调用Android手机端打开二维码的方法:

//callback回调方法
window.JsInterface.JsOpenScanFunction(callback)

ios端会这样调用:

window.webkit.messageHandlers.JsOpenScanFunction.postMessage(callback)

在h5端会分步处理,无疑会增加开发人员的工作量,试想一下,如果交互的地方很多,那么h5端开发人员作何感想?而且后期的维护也是一件非常繁琐的事情,就没有更好的方案吗?

如果h5端可以像调用本地方法那样简单调用手机端方法,那不是非常fashion

那么就需要分别在Android端和ios端分布注入js代码,方便h5端调用。

注入的方式如下:

        @Overridepublic void onPageStarted(WebView view, String url, Bitmap favicon) {super.onPageStarted(view, url, favicon);if (mIsAddJsCode) {//默认truemIsAddJsCode = false;mWebView.loadUrl("javascript:" + "function JsOpenScanFunction(s) {\n    window.JsInterface.JsOpenScanFunction(s);\n}");}}

onPageStarted方法下注入js方法:

function JsOpenScanFunction(s) {window.JsInterface.JsOpenScanFunction(s);
}

这样h5只需要调用JsOpenScanFunction(s)方法就可以实现不同平台调用二维码扫描的功能。从此妈妈在已不担心多端调用的问题了。

注意:JsOpenScanFunction(s) 方法,需要前端和移动端事先约定。

文章就讲到这里了,如果有什么不对的地方还请指出,有什么好的意见请给我留言,我会在第一时间给予回复。

楼主不才,新建了QQ群讨论技术,欢迎大家的加入 478720016

我非常喜欢【平凡世界】里的一句话。我是一个平凡的人,但一个平凡的人,也可以过得不平凡。

说说WebView那些事(header,cookie,注入js)相关推荐

  1. WebView与JS的那些事:注入JS提取页面图片

    上一篇博文中,我们大概了解了js与webview的一些交互,然而,在我们实际的应用中,更倾向于在android端对网页做一些处理,今天带给大家的是往页面注入JS脚本,提取页面上的图片,然后通过另一个A ...

  2. Android WebView注入js文件,判断当前HTML有没有某个js然后再注入

    Android WebView注入js文件,判断当前HTML有没有某个js然后再注入 1.注入js代码 判断当前有没有jQuery文件引入,然后再进行注入. 判断依据其实很简单,获取script 的d ...

  3. webview注入js方法

    Android中向webview注入js代码可以通过webview.loadUrl("javascript:xxx")来实现,然后就会执行javascript后面的代码. 但是当需 ...

  4. 【CyberSecurityLearning 60】ACCESS数据库的注入+ACCESS数据库的cookie注入

    目录 ACCESS注入 雷驰新闻系统v1.0环境搭建: ACCESS数据库注入演示1: 雷驰新闻系统v3.0环境搭建: cookie注入演示2: ACCESS数据库注入用sqlmap怎么做?演示: A ...

  5. 【渗透测试】cookie注入笔记

    目录 什么是cookie? 什么是cookie注入? Cookie手注流程 一.判断注入点 二.判断字段数 三.判断回显点 四.查询相关内容 补充 答疑 1.为什么是select 1,2 不是 sel ...

  6. Access数据库——Cookie注入

    目录 1.Cookie注入 什么是Cookie? Cookie注入简介 Cookie和注入有什么关系? Cookie的核心 2.如何设置Cookie? 方法一:依靠浏览器进行设置 方法二:抓包直接修改 ...

  7. Cookie注入是怎样产生的

    Cookie注入是怎样产生的 现在很多网站都加了防注入系统代码,你输入注入语句将无法注入~~感觉这样的防注入系统不错,但防注入系统没有注意到 Cookies 的问题!所以就有了Cookies注入~~ ...

  8. 关于sql注入之cookie注入

    小知识:所谓SQL注入,就是通过把SQL命令插入到Web表单提交或输入域名或页面请求的查询字符串,最终达到欺骗服务器执行恶意的SQL命令.具体来说,它是利用现有应用程序,将(恶意)的SQL命令注入到后 ...

  9. 手工、工具分别实现cookie注入

    最开始的判断access类型的网站注入点可以用"1 and 1=1"来判断. 不过现在的网站基本上被挡住了.之后呢,可以考虑cookie注入. Dim Tc_Post,Tc_Get ...

最新文章

  1. 360金融首席科学家张家兴:只靠AI Lab做不好AI中台 | 独家专访
  2. [bat批处理文件] 压缩备份
  3. windows 10 使用 VMWare workstation player 启动 windows XP 虚拟机出错的问题
  4. php的变量引用与销毁机制
  5. 诺基亚N9手机升级后PR1.3后反应迟钝、发热、耗电快的问题
  6. Win10操作系统下,如何打开DOS窗口(图文教程)
  7. 鱼眼相机矫正,按经纬度展开为环视图
  8. 驻点、极值点与拐点(判断极值点与拐点的方法)
  9. java毕业设计——基于java+J2ME的五子棋网络对战游戏设计与实现(毕业论文+程序源码)——五子棋网络对战游戏
  10. 高端大气上档次!10个精美的国外HTML5网站欣赏
  11. 蓝懿iOS 技术内容交流和学习心得 11.11
  12. oscp——five86: 2
  13. 计算机远程安装win7,初试使用Ghost工具远程安装win7操作系统
  14. 详解用Java实现爬虫:HttpClient和Jsoup的介绍及使用(请求方式、请求参数、连接池、解析获取元素)
  15. Vi下编辑和退出编辑方法
  16. 牛客MySQL:错题
  17. Oracle分页实现
  18. 两年JAVA经验,非科班菜鸡的我是如何拿下字节、美团、腾讯等offer的?吃透这份面经,大厂不再是梦!
  19. 少一点虚荣,多一点务实
  20. 运营商大数据的作用有哪些

热门文章

  1. 火炬之光中人物被遮挡效果在Ogre中的实现方法
  2. 华为OD机试注意事项,来自已考人员的经验
  3. WPF InkCanvas 书写毛笔效果
  4. 什么是信创产品?怎么成为信创产品?
  5. mysql关系运算_数据库中的关系运算
  6. Kotlin技巧与自定义语法糖
  7. HttpPost.setHeader(Cookie, PHPSESSID= + PHPSESSID)方式的HttpClient工具类
  8. 百度云管家加速补丁:可一直使用高速下载
  9. JavaFX制作水墨大写意画板程序
  10. Java浮点数运算工具类