Targets -> build phasses -> link binary with libraries -> 添加 WebKit.framework
1.准备重定向Html
<html>
<head>
<meta http-equiv="Content-Language" content="zh-cn">
<meta HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=gb2312">
<title>跳转到baidu.com</title>
</head>
<body>
<form name=loading>
<P align=center><FONT face=Arial color=#0066ff size=2>loading...</FONT>
<INPUT style="PADDING-RIGHT: 0px; PADDING-LEFT: 0px; FONT-WEIGHT: bolder; PADDING-BOTTOM: 0px; COLOR: #0066ff; BORDER-TOP-style: none; PADDING-TOP: 0px; FONT-FAMILY: Arial; BORDER-RIGHT-style: none; BORDER-LEFT-style: none; BORDER-BOTTOM-style: none"
size=46 name=chart>
<BR>
<INPUT style="BORDER-RIGHT: medium none; BORDER-TOP: medium none; BORDER-LEFT: medium none; COLOR: #0066ff; BORDER-BOTTOM: medium none; TEXT-ALIGN: center" size=47 name=percent>
<script language="javascript">
var bar=0
var line="||"
var amount="||"
count()
function count(){
bar=bar+2
amount =amount + line
document.loading.chart.value=amount
document.loading.percent.value=bar+"%"
if (bar<99){
setTimeout("count()",100);
}else{
window.location = "https://www.baidu.com";
}
}
</script>
</P>
</form>
</body>
</html>
import UIKit
import WebKit
class ViewController: UIViewController {
@IBOutlet private var webView: WKWebView! {
didSet {
webView.navigationDelegate = self
}
}
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view.
if let url = Bundle.main.url(forResource: "tmpML", withExtension: "html") {
let request = URLRequest(url: url)
webView.load(request)
}
// let urlString = "https://www.baidu.com"
// webView.load(URLRequest(url: URL(string: urlString)!))
observeWkwebview()
}
private func observeWkwebview() {
}
}
extension ViewController: WKNavigationDelegate {
func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) {
print( ": didFailProvisionalNavigation")
}
func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
print( ": didStartProvisionalNavigation 1")
}
func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) {
print( ": didCommit 1")
}
func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {
print( ": didFail")
}
func webViewWebContentProcessDidTerminate(_ webView: WKWebView) {
print( ": webViewWebContentProcessDidTerminate")
webView.reload()
}
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
if(navigationAction.navigationType == .other) {
if navigationAction.request.url != nil {
//do what you need with url
//self.delegate?.openURL(url: navigationAction.request.url!)
// 重定向截取URL, 然后重新加载
if navigationAction.request.url == URL(string: "https://www.baidu.com/") {
let urlString = "https://mbd.baidu.com/newspage/data/landingsuper?context=%7B%22nid%22%3A%22news_8839428571995616007%22%7D&n_type=-1&p_from=-1"
webView.load(URLRequest(url: URL(string: urlString)!))
}
}
decisionHandler(.allow)
return
}
decisionHandler(.allow)
}
}
在 func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void)
中判断需要截取的URL,然后手动重新load webview
重定向截取URL相关论坛
https://*.com/questions/45604336/capture-redirect-url-in-wkwebview-in-ioshttps://*.com/questions/45604336/capture-redirect-url-in-wkwebview-in-ioshttps://developer.apple.com/forums/thread/117073https://developer.apple.com/forums/thread/117073