iPhone开发Swift基础04 WKWebView与Html5 未完待续

主要介绍如何使用UIWebView网页视图和Html标签、CSS样式表、JavaScript语言等Html5相关技术。

相对于原生应用,Html5具有以下优点:

  • 一次编写,到处运行。
  • 在服务器完成更新部署。

不可避免的有得有失,Html5应用相比原生应用而言,在流畅性、访问设备硬件便利性、用户体验等方面时有差距的。

因此在iOS开发中,权衡利弊下,采用混合开发的模式,用原生技术创建不经常改变的布局页面和功能,用Html5创建需要实时变化的页面和功能。

比如在开发营销管理系统时,大部分页面和功能都采用原生开发,而报表因为项目分类杂七杂八的项目多、变动比较大,则会嵌入UIWebView,在UIWebView中加载Html5页面。

ps:UIWebview已经被替换为WKWebview

使用WKWebview加载网页

使用WKWebview之前需要导入WebKit

import UIKit
import WebKit

class ViewController: UIViewController,WKNavigationDelegate,WKUIDelegate{
   
    var imageView : UIImageView?
    
    override func viewDidLoad() {
   
        super.viewDidLoad()
        useWKWebview()
    }
    
    func useWKWebview() -> () {
   
        let bounds = UIScreen.main.bounds
        let frame = CGRect(x: 0, y: 0, width: bounds.width, height: bounds.height)
        
        let webView = WKWebView(frame: frame)
        webView.backgroundColor = UIColor.clear
        
        let url = URL(string: "https://www.baidu.com")
        let urlRequest = URLRequest(url: url!)
        webView.load(urlRequest)
        
        //允许左滑返回上层手势
        webView.allowsBackForwardNavigationGestures = true
        
        //回退
//        webView.goBack()
        //前进
//        webView.goForward()
        //刷新
//        webView.reload()
        
        //UI代理
        webView.uiDelegate = self
        //导航代理
        webView.navigationDelegate = self
        
        self.view.addSubview(webView)
    }
}

运行结果:
在这里插入图片描述

WKWebViewConfiguration

为添加WKWebView配置信息

//创建网页配置对象
WKWebViewConfiguration *config = [[WKWebViewConfiguration alloc] init];

// 创建设置对象
WKPreferences *preference = [[WKPreferences alloc]init];
//最小字体大小 当将javaScriptEnabled属性设置为NO时,可以看到明显的效果
preference.minimumFontSize = 0;
//设置是否支持javaScript 默认是支持的
preference.javaScriptEnabled = YES;
// 在iOS上默认为NO,表示是否允许不经过用户交互由javaScript自动打开窗口
preference.javaScriptCanOpenWindowsAutomatically = YES;
config.preferences = preference;

// 是使用h5的视频播放器在线播放, 还是使用原生播放器全屏播放
config.allowsInlineMediaPlayback = YES;
//设置视频是否需要用户手动播放  设置为NO则会允许自动播放
config.requiresUserActionForMediaPlayback = YES;
//设置是否允许画中画技术 在特定设备上有效
config.allowsPictureInPictureMediaPlayback = YES;
//设置请求的User-Agent信息中应用程序名称 iOS9后可用
config.applicationNameForUserAgent = @"ChinaDailyForiPad";
 //自定义的WKScriptMessageHandler 是为了解决内存不释放的问题
WeakWebViewScriptMessageDelegate *weakScriptMessageDelegate = [[WeakWebViewScriptMessageDelegate alloc] initWithDelegate:self];
//这个类主要用来做native与JavaScript的交互管理
WKUserContentController * wkUController = [[WKUserContentController alloc] init];
//注册一个name为jsToOcNoPrams的js方法
[wkUController addScriptMessageHandler:weakScriptMessageDelegate  name:@"jsToOcNoPrams"];
[wkUController addScriptMessageHandler:weakScriptMessageDelegate  name:@"jsToOcWithPrams"];
config.userContentController = wkUController;

WKUserScript

用于进行JavaScript注入

//以下代码适配文本大小,由UIWebView换为WKWebView后,会发现字体小了很多,这应该是WKWebView与html的兼容问题,解决办法是修改原网页,要么我们手动注入JS
NSString *jSString = @"var meta = document.createElement('meta'); meta.setAttribute('name', 'viewport'); meta.setAttribute('content', 'width=device-width'); document.getElementsByTagName('head')[0].appendChild(meta);";
//用于进行JavaScript注入
WKUserScript *wkUScript = [[WKUserScript alloc] initWithSource:jSString injectionTime:WKUserScriptInjectionTimeAtDocumentEnd forMainFrameOnly:YES];
[config.userContentController addUserScript:wkUScript];

WKUserContentController

这个类主要用来做native与JavaScript的交互管理

//这个类主要用来做native与JavaScript的交互管理
WKUserContentController * wkUController = [[WKUserContentController alloc] init];
//注册一个name为jsToOcNoPrams的js方法,设置处理接收JS方法的代理
[wkUController addScriptMessageHandler:self  name:@"jsToOcNoPrams"];
[wkUController addScriptMessageHandler:
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值