swift 重定向时替换其他URL

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-iosswift 重定向时替换其他URLhttps://*.com/questions/45604336/capture-redirect-url-in-wkwebview-in-ioshttps://developer.apple.com/forums/thread/117073swift 重定向时替换其他URLhttps://developer.apple.com/forums/thread/117073

上一篇:Flutter WebView(flutter_inappwebview)


下一篇:该如何开始webView 性能测试?