WebView & WKWebView & UIWebView

WebView

WKWebView

https://developer.apple.com/documentation/webkit/wkwebview

UIWebView

https://developer.apple.com/documentation/uikit/uiwebview

https://www.hackingwithswift.com/example-code/wkwebview/whats-the-difference-between-uiwebview-and-wkwebview

https://forums.expo.io/t/received-mail-from-apple-about-the-deprecated-api-uiwebview/27117/15

https://developer.apple.com/documentation/webkit/wkwebview


  1. import UIKit
  2. import WebKit
  3. class ViewController: UIViewController, WKUIDelegate {
  4. var webView: WKWebView!
  5. override func loadView() {
  6. let webConfiguration = WKWebViewConfiguration()
  7. webView = WKWebView(frame: .zero, configuration: webConfiguration)
  8. webView.uiDelegate = self
  9. view = webView
  10. }
  11. override func viewDidLoad() {
  12. super.viewDidLoad()
  13. let myURL = URL(string:"https://www.apple.com")
  14. let myRequest = URLRequest(url: myURL!)
  15. webView.load(myRequest)
  16. }
  17. }


  1. //: A UIKit based Playground for presenting user interface
  2. // PlaygroundSupport
  3. import PlaygroundSupport
  4. import UIKit
  5. import WebKit
  6. class ViewController: UIViewController, WKUIDelegate {
  7. var webView: WKWebView!
  8. override func loadView() {
  9. let webConfiguration = WKWebViewConfiguration()
  10. webView = WKWebView(frame: .zero, configuration: webConfiguration)
  11. webView.uiDelegate = self
  12. view = webView
  13. }
  14. override func viewDidLoad() {
  15. super.viewDidLoad()
  16. let myURL = URL(string: "https://cdn.xgqfrms.xyz")
  17. let myRequest = URLRequest(url: myURL!)
  18. webView.load(myRequest)
  19. }
  20. }
  21. PlaygroundPage.current.liveView = ViewController();
  22. /*
  23. import UIKit
  24. import PlaygroundSupport
  25. class MyViewController : UIViewController {
  26. override func loadView() {
  27. let view = UIView()
  28. view.backgroundColor = .white
  29. let label = UILabel()
  30. label.frame = CGRect(x: 150, y: 200, width: 200, height: 20)
  31. label.text = "Hello World!"
  32. label.textColor = .black
  33. view.addSubview(label)
  34. self.view = view
  35. }
  36. }
  37. // Present the view controller in the Live View window
  38. PlaygroundPage.current.liveView = MyViewController()
  39. */

JsBridge

原生开发可以访问平台所有功能,而混合开发中,H5 代码是运行在 WebView 中,

而 WebView 实质上就是一个浏览器内核,其 JavaScript 依然运行在一个权限受限的沙箱中,

所以对于大多数系统能力都没有访问权限,如无法访问文件系统、不能使用蓝牙等。

所以,对于 H5 不能实现的功能,都需要原生去做。

而混合框架一般都会在原生代码中预先实现一些访问系统能力的 API, 然后暴露给 WebView 以供 JavaScript调用;

这样一来,WebView 就成为了 JavaScript与原生 API之间通信的桥梁,主要负责 JavaScript与原生之间传递调用消息;

而消息的传递必须遵守一个标准的协议,它规定了消息的格式与含义;

我们把依赖于 WebView的用于在 JavaScript与原生之间通信并实现了某种消息传输协议的工具称之为 WebView JavaScript Bridge, 简称 JsBridge,它也是混合开发框架的核心。

WebView Scheme / URL Scheme

https://book.flutterchina.club/chapter1/mobile_development_intro.html

refs



xgqfrms 2012-2020

www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!


WebView & WKWebView & UIWebView的更多相关文章

  1. DDGScreenShot — 复杂屏幕截屏(如view ScrollView webView wkwebView)

    写在前面 最近有这么一个需求,分享页面,分享的是web订单截图,既然是web 就会有超出屏幕的部分, 生成的图片还要加上我们的二维码,这就涉及到图片的合成了. 有了这样的需求,就是各种google.也 ...

  2. iOS网络3—UIWebView与WKWebView使用详解

    一.整体介绍 UIWebView自iOS2就有,WKWebView从iOS8才有,毫无疑问WKWebView将逐步取代笨重的UIWebView.通过简单的测试即可发现UIWebView占用过多内存,且 ...

  3. WKWebView与JS交互,UIWebView+JavascriptCore和JS交互

    最近一直在做有关Swift和JavaScript交互的程序,所以有关UIWebView和WKWebView在使用上的差别在此总结下: UIWebView: (1)创建 var webView: UIW ...

  4. WKWebView比UIWebView优越性

    1.在使用两者的过程中发现前者比后者节省内存一倍多,WKWebView 是苹果在 iOS 8 中引入的新组件,目的是给出一个新的高性能的 Web View 解决方案,摆脱过去 UIWebView 的老 ...

  5. 使用WKWebView替换UIWebView

    开发App的过程中,常常会遇到在App内部加载网页,通常用UIWebView加载.这个自iOS2开始使用的网页加载器一直是开发的心病:加载速度慢,占用内存多,优化困难.如果加载网页多,还可能因为过量占 ...

  6. WKWebView 与 UIWebView

    apple和google为webkit该浏览器引擎的发扬光大做出了重要贡献,在WWDC 2014发布会上发布iOS 8中,apple公布了WebKit框架,这意味着OSX和IOS开发者将共用同样的开发 ...

  7. iOS H5 容器的一些探究(一):UIWebView 和 WKWebView 的比较和选择

    来源:景铭巴巴 链接:http://www.jianshu.com/p/84a6b1ac974a 一.Native开发中为什么需要H5容器 Native开发原生应用是手机操作系统厂商(目前主要是苹果的 ...

  8. iOS H5容器的一些探究(一):UIWebView和WKWebView的比较和选择

    一.Native开发中为什么需要H5容器 Native开发原生应用是手机操作系统厂商(目前主要是苹果的iOS和google的Android)对外界提供的标准化的开发模式,他们对于native开发提供了 ...

  9. WKWebView和WebView与JS的交互方式

    UIWebView与JS的交互方式 一,OC调用JS直接调用苹果提供的API - (nullable NSString *)stringByEvaluatingJavaScriptFromString ...

随机推荐

  1. 【网络安全】IOC概念浅析

    OpenIOC(Open Indicator of Compromise,开放威胁指标) MANDIANT 公司发布的情报共享规范,是开源.灵活的框架.OpenIOC是一个记录.定义以及共享威胁情报的 ...

  2. vim 查找并替换多个匹配字符

    通常我们在使用vim的使用需要查找文档中是否含有需要的字符 1.vim 1.txt进入文档编辑 2.输入/键,再输入需要查找的字符,或者输入?键再输入需要查找的字符 3.查找到后可以enter进去,再 ...

  3. hbuilder使用技巧总结

    HBuilder是DCloud(数字天堂)推出的一款支持HTML5的Web开发IDE.HBuilder的编写用到了Java.C.Web和Ruby.HBuilder本身主体是由Java编写,它基于Ecl ...

  4. 4. Linux工作目录切换和文本文件编辑命令

    1.pwd:显示用户当前所处的工作目录 举例:[root@Centos ~]# pwd /root 2.cd:切换工作路径   "cd -"命令返回到上一次所处的目录 " ...

  5. AQS简单理解入门---1

    这篇文章,我们来聊聊面试时一个比较有杀伤力的问题:聊聊你对AQS的理解? 之前有同学反馈,去互联网公司面试,面试官聊到并发时就问到了这个问题.当时那位同学内心估计受到了一万点伤害... 因为首先,很多 ...

  6. jvm系列五-java内存模型(2)

    原作者系列文章链接:并发编程系列博客传送门 前言# 在网上看了很多文章,也看了好几本书中关于JMM的介绍,我发现JMM确实是Java中比较难以理解的概念.网上很多文章中关于JMM的介绍要么是照搬了一些 ...

  7. Testing Beta Round (Unrated)

    比赛链接:https://codeforces.com/contest/1390 A. 123-sequence 题意 给出一个只含有 $1,2,3$ 的数组,问使所有元素相同至少要替换多少元素. 题 ...

  8. Codeforces Round #649 (Div. 2) C. Ehab and Prefix MEXs

    题目链接:https://codeforces.com/contest/1364/problem/C 题意 给出大小为 $n$ 的非递减数组 $a$,构造同样大小的数组 $b$,使得对于每个 $i$, ...

  9. DNA Sequence POJ - 2778 AC自动机 && 矩阵快速幂

    It's well known that DNA Sequence is a sequence only contains A, C, T and G, and it's very useful to ...

  10. 牛客编程巅峰赛S1第3场 - 青铜&白银 C.牛牛晾衣服(二分)

    题意:有\(n\)件衣服,每件衣服都有\(a_{i}\)滴水,所有衣服每分钟都能自然烘干\(1\)滴水,或者用烘干机,每分钟可以烘干\(k\)滴水,问最快多少分钟可以使所有衣服都烘干. 题解:这题和之 ...