当前位置:首页 » 《关于电脑》 » 正文

iOS WebView

23 人参与  2024年09月27日 18:40  分类 : 《关于电脑》  评论

点击全文阅读


文章目录

一、WebView简介二、Web容器简介1. 概述2. 关键组件3. Web容器的功能4.应用场景


一、WebView简介

在iOS开发中,WebView 是一个用于显示网页内容的控件。它允许你在应用程序中嵌入一个浏览器窗口,以便加载和显示网页。iOS 提供了两种主要的 WebView 类:UIWebView 和 WKWebView。其中,WKWebView 是较新的、更强大的选项,推荐在新项目中使用。

UIWebView

UIWebView 是较早的 WebView 实现,但由于性能和安全性问题,已被 WKWebView 取代。从 iOS 8 开始,苹果推荐使用 WKWebView。

WKWebView

WKWebView 是 WebKit 框架的一部分,提供了更好的性能和更多的功能。它支持现代 Web 标准,并且能够更好地与 JavaScript 交互。

用一段代码来看看 WebView 的用处:

#import "ViewController.h"#import <WebKit/WebKit.h>@interface ViewController () <WKNavigationDelegate>@property (nonatomic, strong) WKWebView *webView;@end@implementation ViewController- (void)viewDidLoad {    [super viewDidLoad];        self.webView = [[WKWebView alloc] initWithFrame:self.view.bounds];    // 创建并初始化WKWebView        self.webView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;// 设置自动调整大小        self.webView.navigationDelegate = self; // 设置导航代理        [self.view addSubview:self.webView];        // 添加WKWebView到视图                // 加载网页        NSURL *url = [NSURL URLWithString:@"https://www.baidu.com"];        NSURLRequest *request = [NSURLRequest requestWithURL:url];        [self.webView loadRequest:request];}#pragma mark - WKNavigationDelegate// 页面开始加载时调用- (void)webView:(WKWebView *)webView didStartProvisionalNavigation:(WKNavigation *)navigation {    NSLog(@"页面开始加载");}// 页面加载完成时调用- (void)webView:(WKWebView *)webView didFinishNavigation:(WKNavigation *)navigation {    NSLog(@"页面加载完成");}// 页面加载失败时调用- (void)webView:(WKWebView *)webView didFailProvisionalNavigation:(WKNavigation *)navigation withError:(NSError *)error {    NSLog(@"页面加载失败: %@", error.localizedDescription);}// 接收到服务器重定向请求后调用- (void)webView:(WKWebView *)webView didReceiveServerRedirectForProvisionalNavigation:(WKNavigation *)navigation {    NSLog(@"接收到服务器重定向请求");}// 在收到响应后,决定是否跳转- (void)webView:(WKWebView *)webView decidePolicyForNavigationResponse:(WKNavigationResponse *)navigationResponse decisionHandler:(void (^)(WKNavigationResponsePolicy))decisionHandler {    NSLog(@"收到响应,决定是否跳转");    decisionHandler(WKNavigationResponsePolicyAllow); // 允许跳转}// 在发送请求之前,决定是否跳转- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {    NSLog(@"发送请求,决定是否跳转");    decisionHandler(WKNavigationActionPolicyAllow); // 允许跳转}@end

WKNavigationDelegate 是 WebKit 框架的一部分,用于处理 WKWebView 的导航事件。通过实现 WKNavigationDelegate 协议,你可以监控和控制 WKWebView 的加载过程,包括页面开始加载、加载完成、加载失败等事件。

didStartProvisionalNavigation::在页面开始加载时调用。你可以在这里显示加载指示器。didFinishNavigation::在页面加载完成时调用。你可以在这里隐藏加载指示器。didFailProvisionalNavigation:withError::在页面加载失败时调用。你可以在这里处理加载失败的情况,例如显示错误信息。didReceiveServerRedirectForProvisionalNavigation::在接收到服务器重定向请求后调用。decidePolicyForNavigationResponse:decisionHandler::在收到响应后,决定是否跳转。你可以在这里检查响应,并决定是否允许跳转。decidePolicyForNavigationAction:decisionHandler::在发送请求之前,决定是否跳转。你可以在这里检查请求,并决定是否允许跳转。

在这里插入图片描述

二、Web容器简介

1. 概述

iOS Web容器 是指在iOS应用中嵌入和管理Web内容的环境。它不仅包括用于显示Web内容的组件(如WebView),还涉及管理这些组件的应用框架和技术。

2. 关键组件

WKWebView是iOS中用于显示网页内容的核心组件,替代了过时的UIWebView。加载和显示网页内容(本地或远程)。

支持现代Web技术(如HTML5、CSS3、JavaScript)。提供更高的性能和更好的安全性。
在这里插入图片描述

WKUserContentController管理WebView中的用户脚本和消息处理。

添加和移除用户脚本(JavaScript)。处理从网页发送到原生代码的消息。
在这里插入图片描述

WKScriptMessageHandler:这是一个协议,允许原生代码处理来自网页的消息。

实现 userContentController(_:didReceive:)方法处理JavaScript发送的消息。
在这里插入图片描述

WKNavigationDelegate协议用于管理WebView的导航事件。

拦截和处理网页加载、开始、完成、失败等事件。控制是否允许导航到特定URL。
在这里插入图片描述

WKWebViewConfiguration用于配置WKWebView的属性和行为。

设置WKUserContentController以管理用户脚本。配置偏好设置(如JavaScript是否启用)。设置媒体播放策略等。
在这里插入图片描述

3. Web容器的功能

加载和显示网页:Web容器可以加载本地或远程网页,并在应用中显示。执行JavaScript:通过Web容器,可以在网页中执行JavaScript代码,实现动态交互。与原生代码交互:Web容器允许网页内容与应用的原生代码进行交互,提供更丰富的功能。内容拦截和处理:通过WKNavigationDelegate,可以拦截和处理网页导航事件。

4.应用场景

混合应用(Hybrid App):利用Web容器加载网页内容,实现跨平台的用户界面和业务逻辑。内嵌网页功能:在应用中嵌入特定的网页功能,如帮助页面、用户协议、广告展示等。动态内容加载:通过Web容器加载和展示动态内容,减少应用更新频率。

点击全文阅读


本文链接:http://zhangshiyu.com/post/165543.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

关于我们 | 我要投稿 | 免责申明

Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1