GitHub 地址: https://github.com/tobedefined/TWebKit
很久之前写的一个很简单的库,最近整理了一下发到github了
特点
兼容
Objective-C和swift
TWebView
- 支持自动根据系统版本选择使用
UIWebView还是WKWebView加载网页 - 使用方法简单,与
UIWebView的使用方法极其类似,简化WKWebView的使用 - 双代理模式,支持使用通用的代理
commonDelegate(通用代理的类建议使用singleton单例模式),也支持同时设置普通的代理delegate默认情况下普通代理
delegate里实现的方法会优先于通用代理commonDelegate里实现的同名方法;在普通代理
delegate中实现某个方法的情况下不会去调用通用代理commonDelegate中的同名方法。(如果需要可以在普通代理delegate的该方法中使用[webView.commonDelegate someFunc..]主动调用通用代理commonDelegate的该方法) - 支持显示
ProgressView,UIWebView的Progress使用了NJKWebViewProgress中的部分代码进行模拟进度,支持配置ProgressView的颜色 - 支持配置是否允许滑动返回(
canScrollBack) - 支持配置是否可以放大缩小网页(
canScrollChangeSize) - 支持配置是否屏蔽长按链接显示ActionSheet和MenuController(
blockTouchCallout) - 支持配置是否屏蔽链接的3DTouch预览(
block3DTouch)
TWebViewController
TWebViewController返回键为后退网页,后退到首个网页则popViewControllerTWebViewController点击返回键后退网页则会出现关闭controller的按钮TWebViewController在Debug包中包含清空缓存和输入网址按钮(自动保存最后一次手动输入的网址),在Release包中自动屏蔽。
TWebViewDelegate
- 全是
@optional的代理方法,更容易使用
导入项目
源文件
如果你的项目支持iOS 7以及之前版本,请下载Source目录中的所有文件和TWebKit.bundle,之后将他们放入你的项目中,无须其他配置即可使用。
如果你的项目仅支持iOS 8+,建议使用CocoaPods或者Carthage方式。
CocoaPods
CocoaPods是一个Cocoa项目管理器。你可以使用以下命令去安装CocoaPods:
1 | $ gem install cocoapods |
要使用CocoaPods将TWebKit集成到您的Xcode项目中,请在Podfile中加入:
1 | source 'https://github.com/CocoaPods/Specs.git' |
然后运行一下命令:
1 | $ pod install |
Carthage
Carthage是一个去中心化的依赖管理器,它构建并提供所使用的库的framework。
你可以使用 Homebrew并运行下面的命令安装Carthage
1 | $ brew update |
要将TWebKit集成到使用Carthage的Xcode项目中,请在Cartfile中加入:
1 | github "tobedefined/TWebKit" |
运行carthage update构建framework,并将编译的TWebKit.framework拖入Xcode项目中。
使用方法
- swift
在swift的<Your Target Name>-Bridging-Header.h中加入
1 |
- Objective-C
1 |
你可以在demo中看具体的使用方法,下面是具体的介绍
TWebView
大部分参数和方法与UIWebView的参数相同,使用方式也相同,下面介绍一些不同的参数和方法。
property
- delegate:
id <TWebViewDelegate>,代理,遵守TWebViewDelegate协议的任何对象,若设置,则其实现的方法优先级高于commonDelegate中的方法 - commonDelegate:
id <TWebViewDelegate>,通用代理,遵守TWebViewDelegate协议的任何对象,建议使用singleton的对象作为通用代理 - contentWebView:
UIView,如果< iOS 8.0,返回TWebView中的UIWebView;如果≥ iOS 8.0,返回TWebView中的WKWebView - uiWebView:
UIWebView,如果< iOS 8.0,返回TWebView中的UIWebView;如果≥ iOS 8.0,返回nil - wkWebView:
WKWebView,如果< iOS 8.0,返回nil;如果≥ iOS 8.0,返回TWebView中的WKWebView - scrollView:
UIScrollView,网页的scrollView,readonly,返回UIWebView或者WKWebView的scrollView - showProgress:
BOOL,getter=isShowProgress,是否显示进度条 - progressTintColor:
UIColor,进度条颜色 - progressViewHeight:
CGFloat, 设置进度条的高度 - canSelectContent:
BOOL,设置是否可以长按选择网页中的内容 - canScrollChangeSize:
BOOL,是否可以拖动改变网页大小 - blockTouchCallout:
BOOL,是否屏蔽长按链接出现actionSheet和menuController - canScrollBack:
BOOL,iOS8+支持,是否可以滑动返回上一个网页 - block3DTouch:
BOOL,iOS9+支持,是否屏蔽3DTouch预览链接 - confirmText:
NSString,网页弹出框的确定按钮文字 - cancelText:
NSString,网页弹出框的取消按钮文字 - loadingDefaultTitle:
NSString,网页加载中默认返回的title文字 - successDefaultTitle:
NSString,网页加载成功默认返回的title文字 - failedDefaultTitle:
NSString,网页加载失败默认返回的title文字
function
- (instancetype)init创建一个默认的
TWebViewConfig对象,并调用- (instancetype)initWithConfig:(TWebViewConfig *)config- (instancetype)initWithConfig:(TWebViewConfig *)config使用
config中的参数,进行初始化创建TWebView- (void)clearCache清空cache和cookie
- (void)resetCookieForceOverride:(BOOL)forceOverride取出
NSHTTPCookieStorage中的cookies设置TWebView的cookie,forceOverride参数控制是否强制使用NSHTTPCookieStorage中的cookie值重设TWebView之前存在的同名的cookie- (void)getDocumentTitle:(void (^)(NSString * _Nullable))completion取出网页的
title放入blockcompletion,使用JavaScript获得网页HTML中的document.title+ (nullable NSString *)getJavascriptStringWithFunctionName:(NSString *)function data:(id)data类方法提供拼接JavaScript函数功能,
function参数为要访问的JavaScript的方法名(不需要添加括号),data参数可以为JSON Object或者为普通的NSString,会自动进行转换拼接;返回拼接后的函数调用字符串。- (void)runJavascript:(NSString *)js completion:(void (^__nullable)(id obj, NSError *error))completion运行JavaScript函数,与网页进行交互,
js参数为运行的JavaScript代码,completion参数为回调。
TWebViewConfig
为了将配置参数更加清晰,所以添加了这个类,参数与TWebView的各个配置参数对应,你可以使用TWebViewConfig创建配置,然后使用配置来创建TWebView;也可以直接创建TWebView,然后对创建的对象进行参数赋值。
| TWebViewConfig参数 | -> | TWebView参数 |
|---|---|---|
| webViewCommonDelegate | -> | commonDelegate |
| webViewDelegate | -> | delegate |
| forceOverrideCookie | -> | forceOverrideCookie |
| showProgressView | -> | showProgress |
| progressTintColor | -> | progressTintColor |
| progressViewHeight | -> | progressViewHeight |
| canSelectContent | -> | canSelectContent |
| canScrollChangeSize | -> | canScrollChangeSize |
| blockTouchCallout | -> | blockTouchCallout |
| canScrollBack | -> | canScrollBack |
| block3DTouch | -> | block3DTouch |
| confirmText | -> | confirmText |
| cancelText | -> | cancelText |
| loadingDefaultTitle | -> | loadingDefaultTitle |
| successDefaultTitle | -> | successDefaultTitle |
| failedDefaultTitle | -> | failedDefaultTitle |
TWebViewDelegate
1 | typedef NS_ENUM(NSUInteger, TWebViewLoadStatus) { |
TWebViewController
是否显示清除缓存和输入网址的按钮为自动控制(Debug显示,Release不显示),无需配置
property
- webView:
TWebView,TWebViewController中的TWebView对象,你可以修改一些属性符合你的配置要求。 - navTitle:
NSString,默认的navTitle,如果设置,则覆盖- (void)webView:(TWebView *)webView loadStatus:(TWebViewLoadStatus)status title:(NSString *)title回调,始终显示navTitle。 - backImage:
UIImage,默认使用TWebKit.bundle中的back.png,可以自定义设置返回按钮。
function
- (instancetype)initWithConfig:(TWebViewConfig *)config根据
TWebViewConfig配置来创建TWebViewController。- (void)loadURLFromString:(NSString *)urlString加载网址
urlString- (void)loadURLAndAutoConversionFromString:(NSString *)urlString加载网址
urlString,会对urlString进行转码判断等操作,具体详见NSString *trueURLString(NSString *urlString)- (void)resetWebViewCookieForceOverride:(BOOL)forceOverride调用
TWebView的- (void)resetCookieForceOverride:(BOOL)forceOverride方法,重设cookie