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