Webview问题集(上)-另开分页

缘由:

WKWebkit是APP开发中非常常用的元件,但常常会有一些不是很顺利的疑难杂症,
只能一直查资料,这边我有做了一些小笔记,提醒自己下次遇到的时候不要再犯一样的错误,
希望也能帮上一样遇到相同问题的人,这边会单就网页需要另开分页时会遇上的问题来说~
网页另开分页有两种方法
一种为HTML5的target="_blank"
另一种为JS的window.open('')
若不另外设定,则我们将打不开此页面(无反应),以下是分别的解决办法~

解决方法:

第一种是target="_blank"开启分页的解法
这个方法的解释是这样的,当网页跳转遇到target="_blank"(targetFrame == nil)时,停止预设行为,直接在原页开启

 func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
       // 若 target="_blank",targetFrame 会 = nil
       if navigationAction.targetFrame == nil {
           // 传入 .cancel 停止 navigation 预设的行为
           decisionHandler(.cancel)
           webView.load(navigationAction.request)
           return
       }
       //.allow 则是预设的行为
       decisionHandler(.allow)
    }

第二种window.open开启分页的解法
window.open是js新开页面的一种方法,会用新开视窗的方法去完成载入页面,WKWebView假如没有处理,点击後也一样会没反应,所以需要在WKUIDelegate代理中的createWebViewWith新开一个WebView,当targetFrame == niltargetFrame?.isMainFrame == nil时,处理return nil,这里return nil是不开新的webview,而就在原页加载

 func webView(_ webView: WKWebView, createWebViewWith configuration: WKWebViewConfiguration, for navigationAction: WKNavigationAction, windowFeatures: WKWindowFeatures) -> WKWebView? {
        if navigationAction.targetFrame == nil || navigationAction.targetFrame?.isMainFrame == nil {
            webView.load(navigationAction.request)
        }

        return nil
    }

以上就可以解决WebView跳转URL时,遇到需要另开新分页的状况~~


<<:  IT铁人DAY 6-UML基本认识

>>:  30天学会C语言: Day 5-来比大小啊!

[Day 26] review 一下我们的程序,谈谈 DSL 和 DAO 的差异

前面讲了很多 Kotlin Exposed 框架使用的方式。 今天来讲点观念性的东西,谈谈 Expo...

JS [笔记] Javascript 优良部分、糟糕与不良的部分

优良部份1~5 1. 宽松型别(loose typing)及 易转型 https://codepen...

Day 27 -资料库应用小程序 首页功能(内涵程序码)

废话不多说直接开始 在开启一个专案放以下两个cs DBconnection.cs: using My...

Day4 横空出世的 kernel_clone

前言 昨天的最後提到建立user process的三个系统呼叫:fork(),vfork(),clo...

Explain详解(优化查询好帮手)-Part1(id、select_type、table、partitions、type)

mysql最佳化工具针对一笔叙述根据成本与规则制定一个具体计画,包含了执行叙述的方式、连接表的顺序、...