精华内容
下载资源
问答
  • iOS WKWebView

    2020-09-27 21:43:57
    文章目录iOS WKWebView前言一、WKWebView是什么?二、详细介绍1.使用2.属性、方法详解总结 前言 提示:从iOS8.0和OS X 10.10开始,需使用WKWebView添加web内容,不要使用UIWebView或者WebView。 提示:以下是本篇...

    iOS WKWebView

    参考官方文档的学习使用



    前言

    提示:从iOS8.0和OS X 10.10开始,需使用WKWebView添加web内容,不要使用UIWebView或者WebView。


    提示:以下是本篇文章正文内容,下面案例可供参考

    一、WKWebView是什么?

    显示交互式Web内容的对象,就像App内的浏览器。
    Note: 您可以在WKWebView中使用httpBody内容发出POST请求

    二、详细介绍

    1.使用

    代码如下(示例):

    import UIKit
    import WebKit
    class ViewController: UIViewController, WKUIDelegate {
        
        var webView: WKWebView!
        
        override func loadView() {
            let webConfiguration = WKWebViewConfiguration()
            webView = WKWebView(frame: .zero, configuration: webConfiguration)
            webView.uiDelegate = self
            view = webView
        }
        override func viewDidLoad() {
            super.viewDidLoad()
            
            let myURL = URL(string:"https://www.apple.com")
            let myRequest = URLRequest(url: myURL!)
            webView.load(myRequest)
        }
     }
        
    

    默认情况下,Web视图会自动将显示在Web内容中的电话号码转换为“电话”链接。 轻按“电话”链接后,“电话”应用将启动并拨打该号码。若要关闭此默认行为,请使用不包含phoneNumber标志的WKDataDetectorTypes位字段设置dataDetectorTypes属性。

    2.属性、方法详解

    /* @abstract Checks whether or not WKWebViews handle the given URL scheme by default.
    @param scheme The URL scheme to check.
    */
    // 返回WebKit本机是否支持使用特定URL方案加载资源。
    @available(iOS 11.0, *)
    open class func handlesURLScheme(_ urlScheme: String) -> Bool
    
    // 用于初始化Web视图的配置副本。
    var configuration: WKWebViewConfiguration
    
    // 返回使用指定frame和配置初始化的Web视图。
    init(frame: CGRect, configuration: WKWebViewConfiguration)
    
    // 遵守了NSCoding 用xib构建控件时
    public init?(coder: NSCoder)
    
     ******************* View Information *****************
    
    // 与webView关联的滚动视图
    var scrollView: UIScrollView
    
    // 页面title 支持KVO
    var title: String?
    
    // 当前URL 支持KVO
    var url: URL?
    
    // 自定义用户代理字符串。如果未设置自定义用户代理字符串,则设置为nil。
    var customUserAgent: String?
    
    // 当前提交的导航的SecTrustRef对象。 支持KVO
    // 用于评估信任的对象
    var serverTrust: SecTrust?
    
    // Deprecated 当前提交的导航的证书链的对象数组。
    var certificateChain: [Any]
    
    
    // ******************* Delegates *****************
    
    // WebView的导航代理 
    // [详细介绍](https://blog.csdn.net/meiyulong518/article/details/108733416)
    var navigationDelegate: WKNavigationDelegate?
    
    // 用户界面代理
    var uiDelegate: WKUIDelegate?
    
    
     ******************* Loading Content *****************
    
    // 估计当前导航中已加载的部分。 范围为0.0到1.0。
    // 导航加载完成后estimatedProgress值保持为1.0直到新的导航开始重新设置为0.0 。
    // 支持KVO
    var estimatedProgress: Double
    //ex. estimatedProgress 监听 
    webView.addObserver(self, forKeyPath: "estimatedProgress", options: .new, context: nil)
    
    override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
            
            if keyPath == "estimatedProgress" {
                print(webView.estimatedProgress)
            }
        }
    
    // 是否已通过安全加密的连接加载页面上的所有资源 支持KVO
    var hasOnlySecureContent: Bool
    
    // 设置网页内容和基本URL
    func loadHTMLString(String, baseURL: URL?) -> WKNavigation?
    
    // WKNavigation  跟踪网页的加载进度,Web视图的加载方法返回了WKNavigation,并且传递给导航委托方法,以唯一地标识网页
    // 从头到尾加载。
    @available(iOS 8.0, *)
    open class WKNavigation : NSObject {
    
        
        /** The content mode used when loading this webpage.
         @discussion The value is either WKContentModeMobile or WKContentModeDesktop.
         */
        @available(iOS 13.0, *)
        open var effectiveContentMode: WKWebpagePreferences.ContentMode { get }
    }
    
    // 当前是否正在加载内容
    var isLoading: Bool
    
    // 重新加载当前页面 返回代表重新加载的网页的新导航。
    func reload() -> WKNavigation?
    func reload(Any?)//发送此消息的对象
    
    // 重新加载当前页面,并在可能的情况下使用缓存验证条件执行端到端重新验证。
    func reloadFromOrigin() -> WKNavigation?
    func reloadFromOrigin(Any?)//发送此消息的对象
    
    // 停止加载当前页面上的所有资源。
    func stopLoading()
    func stopLoading(Any?)//发送此消息的对象
    
    // 设置网页内容和基本URL, 数据,数据的MIME类型,数据的字符编码名称,baseURL用于解析文档中相对URL的URL iOS 9.0+
    func load(Data, mimeType: String, characterEncodingName: String, baseURL: URL) -> WKNavigation?
    
    // 加载本地文件。 导航到的文件URL,允许读取访问的URL。
    // 如果ReadAccessURL是一个单独的文件则可能只会加载这个文件,
    // 如果ReadAccessURL是一个文件夹则会加载这个文件下的文件,iOS 9.0+
    func loadFileURL(URL, allowingReadAccessTo: URL) -> WKNavigation?
    
    
     ******************* Scaling Content *****************
    
    // 放大手势是否会更改WebView的放大比例。 macOS 10.10+
    var allowsMagnification: Bool
    
    // 当前页面内容缩放的比例 macOS 10.10+
    var magnification: CGFloat
    
    // 按指定比例缩放页面内容,并将结果居中指定点 macOS 10.10+
    func setMagnification(CGFloat, centeredAt: CGPoint)
    
    
     ******************* Navigating *****************
    
    // 水平滑动手势是否会触发后退列表导航
    var allowsBackForwardNavigationGestures: Bool
    
    // WebView的后退列表
    var backForwardList: WKBackForwardList
    
    // 在后退列表中有一个后项可以导航到。
    var canGoBack: Bool
    
    // 在后退列表中有一个可以导航到的前进项目。
    var canGoForward: Bool
    
    // 是否允许按下链接可显示链接目标的预览。
    // 在iOS中,此属性在支持3D Touch的设备上可用。 在iOS 10及更高版本中,默认值为true; 在此之前,默认值为false。
    // 如果将此属性的值设置为true,则iOS用户可以按压链接来预览链接和检测到的数据,例如地址和电话号码(WKDataDetectorTypes iOS 10)。 用户将这样的预览称为偷看。 如果用户在链接预览上按得更深,则预览将导航(或pop)到目标。 由于弹出式导航会将用户从您的应用切换到Safari,因此它是iOS应用的可选功能。
    // 如果你想支持链接预览,并且也想将用户保留在你的App里,你可以使用SFSafariViewController,如果你将WebView用作应用内浏览器,则最好进行此更改,Safari视图控制器类自动支持链接预览。
    // 在macOS中,此属性在具有Force Touch触控板的设备上可用。 在macOS中,默认值为true。
    // 将此属性设置为默认值true时,macOS用户可以强制单击链接以显示预览窗口,其中显示了链接的目的地。 如果用户然后单击预览,则目的地将在Safari中打开。
    // 在两个平台上,将此属性设置为true时,所有类型的检测到的数据都会对按压做出响应,也就是说,在iOS 9和OS X v10.11中,您无法指定WKWebView类中检测到的数据类型
    var allowsLinkPreview: Bool
    
    // SFSafariViewController Test
    import SafariServices
    let url = URL.init(string: "https://www.baidu.com")
    let vc = SFSafariViewController(url: url!)
    self.present(vc, animated: true, completion: nil)
    
    // 导航到后退列表中的后一项。如果在后退列表中没有后项,则返回为nil
    func goBack() -> WKNavigation?
    func goBack(Any?)
    
    // 导航到后退列表中的前一项。 如果在后退列表中没有前项,则返回为nil
    func goForward() -> WKNavigation?
    func goForward(Any?)
    
    // 从后退列表导航到一个项目,并将其设置为当前项目。
    // to:导航到的项目。 该项目必须是网络视图的后退列表中的项目之一。
    // 如果它已经是当前项目或不属于Web视图的后退列表,则返回null。
    func go(to: WKBackForwardListItem) -> WKNavigation?
    
    // 导航到请求的URL。
    func load(URLRequest) -> WKNavigation?
    
    
    
    
    
    
    
    
    
    
     ******************* Executing JavaScript *****************
    
    // 执行JavaScript字符串,该方法将脚本的结果(或错误)发送到完成处理程序(completionHandler)。 完成处理程序始终在主线程上运行。
    func evaluateJavaScript(String, completionHandler: ((Any?, Error?) -> Void)?)
    
     ******************* Taking Snapshots *****************
    
    // 拍摄可见视图的快照。
    func takeSnapshot(with: WKSnapshotConfiguration?, completionHandler: (UIImage?, Error?) -> Void)
    webView.takeSnapshot(with: nil) { (image, error) in
       if let img = image {
           UIImageWriteToSavedPhotosAlbum(img, self, nil, nil)
       }
     }
    
    
    
    
     ******************* Instance Properties 实例属性 *****************
    
    // iOS 14.0+. 媒体类型
    var mediaType: String?
    
    // iOS 14.0+ 页面缩放比例
    var pageZoom: CGFloat
    
     ******************* Instance Methods 实例方法 beat  *****************
    
    // iOS 14.0+  Xcode 12.0+ 没有概述
    func callAsyncJavaScript(String, arguments: [String : Any], in: WKFrameInfo?, in: WKContentWorld, completionHandler: ((Result<Any, Error>) -> Void)?)
    
    // iOS 14.0+ Xcode 12.0+ 没有概述
    func createPDF(configuration: WKPDFConfiguration, completionHandler: (Result<Data, Error>) -> Void)
    
    // iOS 14.0+ Xcode 12.0+ 没有概述
    func createWebArchiveData(completionHandler: (Result<Data, Error>) -> Void)
    
    // iOS 14.0+ Xcode 12.0+ 没有概述
    func evaluateJavaScript(String, in: WKFrameInfo?, in: WKContentWorld, completionHandler: ((Result<Any, Error>) -> Void)?)
    
    // iOS 14.0+ Xcode 12.0+ 没有概述
    func find(String, configuration: WKFindConfiguration, completionHandler: (WKFindResult) -> Void)
    
    // iOS 14.0+ Xcode 12.0+ 没有概述
    func printOperation(with: NSPrintInfo) -> NSPrintOperation
    
    
    // END
    

    总结

    以上就是今天要介绍的内容,本文简单介绍了WKWebView的属性方法和使用,接下来我会用三种不同加载的方式来进一步深入的总结学习。

    展开全文
  • WKWebView微信适配

    2017-03-02 19:42:32
    WKWebView 背景是微信webview将要从UIWebView...官方的解释:WKWebView是一个显示交互式Web内容的对象,例如浏览器内的应用程序。您可以使用WKWebView在您的应用程序中嵌入Web内容。为此,创建WKWebView对象,将其设...
        

    WKWebView

    背景是微信webview将要从UIWebView切换成WKWebView,前端的web页面需要进行适配。

    什么是WKWebView

    官方的解释:WKWebView是一个显示交互式Web内容的对象,例如浏览器内的应用程序。您可以使用WKWebView在您的应用程序中嵌入Web内容。为此,创建WKWebView对象,将其设置为视图,并向其发送加载Web内容的请求。

    为什么要用WKWebView

    首先来看下UIWebView的槽点,通常的iOS App用UIWebView加载网页,这个自iOS2开始使用的网页加载器一直是开发的心病:加载速度慢,占用内存多,优化困难。如果加载网页多,还可能因为过量占用内存而给系统kill掉。

    那wk有什么特点:
    1、在性能、稳定性、内存占用有很大提升。有的文章说4倍的渲染性能,不知真假,从体验上来看,非常流畅。
    2、允许JavaScript的Nitro库加载并使用(UIWebView中限制);
    3、支持了更多的HTML5特性;
    4、高达60fps的滚动刷新率以及内置手势;滚动刷新频率,从实际体验看,确实流畅。

    总得来说更快,更少,更完善,iOS 的最佳选择。

    Starting in iOS 8.0 and OS X 10.10, use WKWebView to add web content to your app. Do not use UIWebView or WebView。

    iOS 8.0后的版本开始支持,目前已经都10.+了,可以大胆的用。

    对H5页面的影响

    1、点击事件,300ms的延迟还存不存?

    令人高兴的是,300ms的这个问题在wkwebview得到了解决。前提是需要设置user-scalable=0 的页面,WKWebView将会移除 300ms 的 click 事件延迟。

    var t;
    document.getElementById('j_click').ontouchstart = function(){
       t = +new Date();
    };
    document.getElementById('j_click').onclick = function(){
       alert(+new Date() - t);
    };
    
    // 如果UIWebview 或者没有设置user-scalable的wk页面,t 大概是400ms+
    // WKWebView t可以到40ms左右

    fastclick这类兼容库以及用touch事件模拟的click,可以说再见了。

    2、滑动页面JS挂起的问题还有吗?

    答案是没有了,即使滑动页面,js照旧执行。所以节流函数还是很有必要,减少不必要的大量计算。

    以往在做滚动加载的组件时,微信内的翻页的时候老是要等待下一页加载,现在终于不用等了。

    <body style="height:1000px;">
       <ul id="add"></ul>
    </body>
    <script type="text/javascript">
    window.onscroll = function(){
           var ol = document.createElement('ol');
           ol.innerHTML = new Date();
           document.getElementById('add').appendChild(ol)
    }
    </script>

    WechatIMG175
    WechatIMG176

    目前就发现这两点比较明显的改善,如果后续发现了再补充。当然wkwebview也有坑,具体微信内要怎么兼容看文档。

    iOS微信在6.5.1,已经开始灰度了,后续版本会全量。兼容wkwebview需要关注的点请参考官方文档

    参考
    https://zhuanlan.zhihu.com/p/...
    http://www.layabox.com/news/2...
    http://nshipster.cn/wkwebkit/

    本文地址:http://www.iamaddy.net/2017/0...,未经过允许,禁止一切形式的转载

    展开全文
  • WKWebView修改cookie

    2019-01-30 19:51:54
    说起WKWebView,性能好,性能高,闻风丧胆的操作应该是怎么设置cookie,查了很多方法,设置cookie有很多种方法,还要兼容老版本,通过setCookie{}block设置,有的时候操作失败,是什么原因都不知道。通过多次尝试,...

           说起WKWebView,性能好,性能高,闻风丧胆的操作应该是怎么设置cookie,查了很多方法,设置cookie有很多种方法,还要兼容老版本,通过setCookie{}block设置,有的时候操作失败,是什么原因都不知道。通过多次尝试,通过js添加,发现成功率100%,方法如下:

    let myCookie = "document.cookie='usercenter.id=\(Account.default);Domain=\(APIService.server); Path=/;'"
        let script = WKUserScript(source: myCookie, injectionTime: .atDocumentStart, forMainFrameOnly: true)
        web = WKWebView()
        web.navigationDelegate = self
        web.configuration.userContentController.addUserScript(script)

    注意,cookie=‘’(单引号),如果弄错,设置还是失败的,建议赶紧替换UIWebView吧,有内存泄漏,而且性能低,加载一个h5界面,需要半个小时

    展开全文
  • iOS - WKWebView Cookie

    2019-03-12 06:42:38
    从UIWebview换到WKWebView之后,会发现管理Cookie很麻烦事,经常出现 App自定义Cookie的值丢失 或 更新不及时 的情况。苹果iOS11之后也提供了WKWebView的Cookie...什么是Cookie? Cookie一种早期的客户端存储机制...

    从UIWebview换到WKWebView之后,会发现管理Cookie是很麻烦事,经常出现 App自定义Cookie的值丢失 或 更新不及时 的情况。苹果iOS11之后也提供了WKWebView的Cookie API WKHTTPCookieStore,但是目前大多数App最低版本不可能设置最低版本到iOS11,所以我们只能想别的办法。

    什么是Cookie?

    Cookie是一种早期的客户端存储机制,起初是针对服务端脚本设计使用的。以Cookie存储的数据,不论服务端是否需要,每次HTTP请求都会把这些数据传送到服务端。

    Cookie是指Web浏览器存储的少量数据,同时它是与具体的Web页面或者站点相关。Cookie最早是设置为被服务端所用的,从最底层来看,作为http协议的一种拓展实现它。

    Cookie数据会自动在Web浏览器和Web服务器之间传输,因此服务端脚本就可以读写存储在客户端的cookie值。

    Cookie的属性

    除了 name 与 value,Cookie其他属性:

    domain:作用域名

    举例: 设置domain为 bj.jiehun.com.cn,则在app.jiehun.com.cn 等子域名不会生效; 如设置domain为 .jiehun.com.cn,则在jiehun.com.cn 的所有子域名生效。 注意:IP地址特殊,直接设置原地址即可。

    path:作用路径

    举例: 如在 www.jiehun.com.cn,设置 path=/m,则只在 www.jiehun.com.cn/m 或 /m子目录下生效,如 www.jiehun.com.cn/app 就不会生效; 不设置默认为当前URL默认路径;我们通常会设置 “/” 代表所有目录。

    expires:过期时间,格林威治时间 (GMT)字符串格式,设置过期时间后将会存储在一个文件直到过期。

    // 打印当前时间
    var date = new Date();
    date.setTime(date.getTime());
    console.log(date.toGMTString());
    // 打印结果为:Mon, 25 Feb 2019 15:35:03 GMT
    
    // 设置cookie时间
    document.cookie='name=value;expires=' + date.toGMTString();
    复制代码

    max-age:有效时长,单位秒。

    // 设置 cookie 有效期 10秒
    document.cookie='name=value;max-age=10;
    复制代码

    Cookie默认的有效期很短暂,只能维持在Web浏览器的回话期间,一旦用户关闭浏览器,Cookie保存的数据就全部丢失。 如果想要延长Cookie的有效期,可以通过设置max-age或expires属性。一旦设置有效期,浏览器就会将Cookie数据存储在一个文件中,并且直到过了指定的有效期才会删除该文件。

    secure: Bool值,是否为安全传输,如设置true,在Https或其他网络安全协议才会传输。

    ####演示 我们可以随便找一个浏览器,如Safari,打开后快捷键 command + alt + c 打开调试窗口:

    读取Cookie

    document.cookie
    复制代码

    保存Cookie

    document.cookie='testName=testValue;path=/;max-age=60*60';
    复制代码

    因为Cookie的名和值中不允许包含分号、逗号和空格,因此,在存储前可以采用全局函数 encodeURIComponent()对值进行编码。相应的,读取cookie值的时候采用decodeURIComponent() 函数解码。

    删除Cookie

    相同的名字随意设置一个值,并将max-age指定为0,相当于删除Cookie。

    document.cookie='testName=;domain=.jiehun.com.cn;path=/;max-age=0';
    复制代码

    Cookie的局限性

    个数限制300(现在已经可以超越),每个Cookie数据即名字和值的总量不能超过4KB。

    WKWebView 管理Cookie

    上面了解了Cookie的基本知识,我们如何应用到iOS开发中?这里主要介绍WKWebview的使用方法。

    因为JavaScript只能设置浏览器本地的cookie,往往客户端第一次请求由开发者创建Request对象请求:

    [webview loadRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"url"]]];
    
    复制代码

    所以第一次请求需要手动设置请求头中的Cookie,可以继承WKWebView重写 loadRequest 方法,或者直接通过runtime Swizzling loadRequest 方法:

    /**重写 loadRequest 方法,在请求头中添加自定义到cookie*/
    - (nullable WKNavigation *)loadRequest:(NSURLRequest *)request{
        
        NSMutableURLRequest *newRequeset = [request mutableCopy];
        
        // 自定义cookie值
        NSDictionary *customCookieDic =@{
                                         @"testName1":@"value1",
                                         @"testName2":@"value2"
                                         };
        
        // 拼接cookie字符
        NSString *cookie = @"";
        for (NSString *key in customCookieDic.allKeys) {
            NSString *keyValue = [NSString stringWithFormat:@"%@=%@;",key,[customCookieDic objectForKey:key]];
            cookie = [cookie stringByAppendingString:keyValue];
        }
        
        // 设置到请求头
        [newRequeset setValue:cookie forHTTPHeaderField:@"Cookie"];
        
        return [super loadRequest:newRequeset];
    }
    复制代码

    此时请求发出,服务端可以收到我们请求头中的cookie值,且请求头的cookie会自动保存到浏览器。

    但我们发现请求头中自动保存到浏览器的cookie并不可靠,因为没有设置域名和目录的作用区,往往浏览器内二次跳转就会丢失,我们如何来保证浏览器的Cookie永不丢失?

    WKUserScript

    Webkit支持通过 WKUserScript 向网页中注入js脚本:

    // 设置代码块
    // @Source 脚本代码
    // @injectionTime 执行时机,网页渲染前或渲染后
    // @MainFrameOnly Bool值,YES只注入主帧,NO所有帧
    WKUserScript *cookieInScript = [[WKUserScript alloc] initWithSource:@"js脚本代码"
                                                                  injectionTime:WKUserScriptInjectionTimeAtDocumentStart
                                                               forMainFrameOnly:NO];
    // 插入脚本
    [webview.configuration.userContentController addUserScript:cookieInScript];
    复制代码

    所以,保证Cookie不丢失可以通过此方法注入设置cookie js代码,在页面每次渲染都会设置,从而保证不会丢失。

    每个cookie值可以设置为一个代码块,为了表示每个代码块的唯一,我们可以在注入脚本的最后添加 注释标示;其实就是一句注释掉的代码,来确定cookie代码块的唯一性,为以后删除某个代码块做铺垫。 举例设置某个cookie值的 js代码:

    document.cookie ='cityId=10010;domain=.jiehun.com.cn;path=/';
    // The cookie code  identified is cityId (代码块标示)
    复制代码

    为了避免Cookie重复问题,可以直接把cookie设置在根域名。

    删除代码块

    每次调用 addUserScript方法插入脚本块,代码块会保存在WKUserContentController类的 userScripts数组属性中:

    @interface WKUserContentController : NSObject <NSSecureCoding>
    
    /*! @abstract The user scripts associated with this user content
     controller.
    */
    @property (nonatomic, readonly, copy) NSArray<WKUserScript *> *userScripts;
    复制代码

    因为 userScripts 为只读权限,我们并不能修改,所以修改某个某一个cookie代码块的时候,需要先全部清除,再把不需要删除的代码块重新添加进去,这里就需要用到前面所说的代码块注释的唯一标示:

    /**
     删除某个代码片段
     @param tag 片段标示,//The cookie code  identified is cookieName
     */
    - (void)deleteUserSciptWithTag:(NSString *)tag {
        
        if (tag) {
            WKUserContentController *userContentController = webView.configuration.userContentController;
            NSMutableArray<WKUserScript *> *array = [userContentController.userScripts mutableCopy];
            int i = 0;
            BOOL isHave = NO;
            for (WKUserScript* wkUScript in userContentController.userScripts) {
                // 通过注释标示判断代码块是否为某个cookie
                if ([wkUScript.source containsString:tag]) {
                    [array removeObjectAtIndex:i];
                    isHave = YES;
                    continue;
                }
                i ++;
            }
            
            if (isHave) {
                ///没法修改数组 只能移除全部 再将不需要删除的cookie重新添加
                [userContentController removeAllUserScripts];
                for (WKUserScript* wkUScript in array) {
                    [userContentController addUserScript:wkUScript];
                }
            }
        }
    }
    复制代码

    通过这个Webkit可注入脚本的逻辑,我们基本可以保证使用cookie在WKWebview准确性和不丢失。

    下面也写了一个Demo来演示如何通过一个代理方法来管理WKWebView所有Cookie: github地址:https://github.com/GaoGuohao/GGWkCookie

    展开全文
  • 使用WKWebView的时候,如果想要实现JS调用OC方法,除了拦截URL之外,还有一种简单...MessageHandler 是什么WKWebView 初始化时,有一个参数叫configuration,它是WKWebViewConfiguration类型的参数,而WKWebView...
  • 从 UIWebView 到 WKWebView

    2016-07-01 17:07:08
    ①本文章适合有 UIWebView 基础的人看,如果实在没用过的话,至少你要知道 UIWebView 什么东西。 ② UIWebView 和 WKWebView 的区别 WKWebView 更快(占用内存可能只有 UIWebView 的1/3~1/4),没有缓存,更为...
  • WKWebview相关知识点记录

    千次阅读 2017-02-06 14:36:47
    背景 WKWebView 是苹果在iOS 8中引入的新组件,目的是提供一个现代的支持最新Webkit功能的网页浏览控件,摆脱过去 ...也就是说WKWebview是针对IOS端的手机浏览器内核,本来这不关我们什么事儿的,但是问题在于微信i
  • UIWebView和WKWebView

    2019-05-03 00:25:29
    什么是UIWebView UIWebViewiOS内置的浏览器控件 系统自带的Safari浏览器就是通过UIWebView实现的 UIWebView不但能加载远程的网页资源,还能加载绝大部分的常见文件 html\htm pdf、doc、ppt、txt mp4 …...
  • WKWebview的bug

    2019-04-10 06:49:20
    用webview打开一个h5,比如长按图片时弹出系统alertVC,平时没有发现什么问题,但如果此时你webview控制器present呈现的话,会发现奇怪的bug。alertVC__dismiss__时,控制器也会奇怪的跟着dismiss。当时看到这个...
  • WKWebView使用交互

    2018-10-29 18:33:58
    1. 获取Session,Session是由服务器生成的,具体是什么就需要百度搜索一下了,在这里就不做过多的解释。在获取Session时,我之前的理解是,只有在网页的URL中才可以获取,其实不然,只要在同一个服务器下的网络链接...
  • iOS WKWebView——UIWebView的进阶

    千次阅读 2017-08-08 10:07:22
    什么是WKWebView,其作用与UIWebView基本一致。   那为什么明明有UIWebView苹果还要开发WKWebView呢?   嗯,少年(仙女),你很有想法。   技术需要与时俱进, 1.HTML5的大热必然对UIWebView的要求增高,...
  • 使用WKWebView的时候,如果想要实现JS调用OC方法,除了拦截URL之外,...MessageHandler 是什么WKWebView 初始化时,有一个参数叫configuration,它是WKWebViewConfiguration类型的参数,而WKWebViewConfiguratio...
  • 红色框部分是WKWebView,左边的正常显示情况,右边的异常显示。我在网页加载完成回调里执行的webview高度自适应内容: // 页面加载完成之后调用 - (void)webView:(WKWebView *)webView didFinishNavigation:...
  • 一、什么是MessageHandler   MessageHandler是WKWebView用来处理原生与JS交互的消息处理机制。也即说:JS要想调用iOS原生的方法,可以采用MessageHandler。   二、怎么注入js的方法 WKWebView在创建的时候...
  • QQ群号 113767274 有什么问题或者改进的地方大家一起讨论 要求 ARC only ##如何添加到项目中 pod 'IMYWebView' ##使用方法 直接把你项目中的 'UIWebView' 名称替换为 'IMYWebView' ##警告 部分在UIWebView显示正常的...
  • 在iOS 8.0以后苹果推出WKWebView,...我们先来看下Cookie到底什么东西: 简单地说,cookie 就是浏览器储存在用户电脑上的一小段文本文件。cookie 纯文本格式,不包含任何可执行的代码。一个 Web 页面或服务器...
  • WKWebView iOS9 加载H5界面失败

    千次阅读 2018-08-28 10:28:45
    当时想了一下WKWebView是在iOS8 推出来的, API接口都是一样的,怎么会不好用, 一开始觉得代码写错了. 但是想到WKWebView加载H5,也就几句代码的事情,又能出什么问题. 然后怀疑前端是不是限制iOS运行的版本, 回答也是...
  • WKWebView与JS交互之实战技巧介绍

    万次阅读 2016-04-30 18:34:00
    前言上一篇专门讲解了WKWebView相关的所有类、代理的所有API。前篇文章地址:http://blog.csdn.net/baihuaxiu123/article/details/51286109 那么本篇讲些什么呢?当然实战了!先看看效果图.效果图通过本篇文章,...
  • ①本文章适合有 UIWebView 基础的人看,如果实在没用过的话,至少你要知道 UIWebView 什么东西。 ② UIWebView 和 WKWebView 的区别 WKWebView 更快(占用内存可能只有 UIWebView 的1/3~1/4),没有缓存,更为...
  • WKWebView的简单使用

    2019-09-12 02:37:14
    最近在写一个套客APP,所以需要用到UIWebView,但是最后我放弃了UIWebView,那因为我在使用的过程中遇到了一个问题,那就是当我利用UIWebView加载网页之后,在切换上面的tabbard...也没有什么收获,最后我把UIWebView...
  • 很多人遇到WKWebView高度获取不准确,例如:下面一片空白,高度一直在增加,上拉刷不动,各种问题。 获取高度一般用kvo或者js,我使用kvo监听。 获取不到高度,换下URL,百度什么的试试,先排除下。 我的做法,...
  • iOS WKWebView使用总结

    2018-07-21 10:24:00
    点击上方“程序员大咖”,选择“置顶公众号”关键时刻,第一时间送达! 先不说楚枫的这般年纪,能够踏入元武一重说明了什么,最主要的,楚枫在刚刚踏入核心地带时,明明只是...
  • 使用WKWebView替换UIWebView的过程坎坷的,有很多坑的。 只怪自己学识浅薄,解决问题能力不足,现在还有好几个大坑没有填。导致项目不得不使用UIWebView继续应付(我倒没觉得UIWebView没什么不好,稳定坑少,...
  • 简单说就是JS调用OC的方法,这里我们选择的是WKWebView,至于为什么不用UIWebView,自行百度或者看开发文档。 实现: 1、首先应该倒入 WebKit 框架 #import &lt;WebKit/WebKit.h&gt; 2、懒加载一个...
  • 这到底什么呢?看了下SDK,废话不多说,看下面这个图片, 看这句话,是不是逻辑上有点含糊,先设置好代理,先调用本接口。差别就在这句话里。一开始我再webView的懒加载方法里设置的navigationDeleagete,细心的...
  • WKWebView高度获取不准确,解决办法

    千次阅读 2018-11-01 16:31:54
    WKWebView高度获取不准确,解决办法 一般APP含有详情页,目前主流做法,上面放个WKWebView(iOS8之后),下面原声拼接(评论或展示的Cell)...获取不到高度,换下URL,百度什么的试试,先排除下。 我的做法,代码没问题...
  • 使用WKWebView的时候会出现明明自己做的一些页面有提示框, 为什么使用别人的页面提示框总是不显示, 其实很大部分原因因为该提示框通过JS调用的, 需要实现WKUIDelegate来进行监听 // MARK: - WKUIDelegate ...

空空如也

空空如也

1 2 3 4 5 ... 7
收藏数 128
精华内容 51
关键字:

wkwebview是什么