sách gpt4 ăn đã đi

ios - 将 UIWebView 委托(delegate)迁移到 WKWebView 委托(delegate)方法

In lại 作者:IT王子 更新时间:2023-10-29 05:11:28 29 4
mua khóa gpt4 giày nike

我正在努力将 UIWebView 迁移到 WKWebView。我已经更改了所有委托(delegate)方法。我需要 WKWebView 委托(delegate)方法等于下面的 UIWebView 委托(delegate)方法。该应用程序运行良好。但登录 session 不保留

UIWebView:

extension WebViewController: UIWebViewDelegate {

func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {

guard let url = request.url else {
trả về đúng
}

guard !url.absoluteString.contains("data:application/pdf") else {
navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.action,
target: self,
action: #selector(share(sender:)))
trả về đúng
}

guard url.pathExtension != "pdf" else {
let safariVC = SFSafariViewController(url: url)
safariVC.modalPresentationStyle = .popover
present(safariVC, animated: true, completion: nil)
trả về sai
}

guard url.isLogin() == false else {
AppDelegate.navigationController.signOut(.sessionOnly)
trả về sai
}

guard let mobileSite = url.asMobileSite() else {
trả về đúng
}

let mobileRedirect = URLRequest(url: mobileSite)
webView.loadRequest(mobileRedirect)
trả về sai

}

func webViewDidStartLoad(_ webView: UIWebView) {
numberOfDidStartLoads += 1
}

func webViewDidFinishLoad(_ webView: UIWebView) {
numberOfDidStartLoads -= 1
}

func webView(_ webView: UIWebView, didFailLoadWithError error: Error) {
numberOfDidStartLoads -= 1
}
}

我尝试了下面的代码并让 session 过期。

extension WebViewController: UIWebViewDelegate {

func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (_: WKNavigationActionPolicy) -> Void) {

guard let url = navigationAction.request.url else {
decisionHandler(.allow)
trở lại
}

guard !url.absoluteString.contains("data:application/pdf") else {
navigationItem.rightBarButtonItem = UIBarButtonItem(barButtonSystemItem: UIBarButtonSystemItem.action,
target: self,
action: #selector(share(sender:)))
decisionHandler(.allow)
trở lại
}

guard url.pathExtension != "pdf" else {
let safariVC = SFSafariViewController(url: url)
safariVC.modalPresentationStyle = .popover
present(safariVC, animated: true, completion: nil)
decisionHandler(.cancel)
trở lại
}

guard url.isLogin() == false else {
AppDelegate.navigationController.signOut(.sessionOnly)
decisionHandler(.cancel)
trở lại
}

guard let mobileSite = url.asMobileSite() else {
decisionHandler(.allow)
trở lại
}

let mobileRedirect = URLRequest(url: mobileSite)
webView.load(mobileRedirect)
decisionHandler(.cancel)
trở lại

decisionHandler(.allow)

}

func webViewDidStartLoad(_ webView: UIWebView) {
numberOfDidStartLoads += 1
}

func webViewDidFinishLoad(_ webView: UIWebView) {
numberOfDidStartLoads -= 1
}

func webView(_ webView: UIWebView, didFailLoadWithError error: Error) {
numberOfDidStartLoads -= 1
}
}

请帮我解决这个问题。我在将代码从 UIWebView 更改为 WKWebView 时犯了一些错误。

câu trả lời hay nhất

您可能需要在代码中实现以下内容,这意味着不要使用 UIWebViewDelegate 协议(protocol),而是尝试使用 WKNavigationDelegate 协议(protocol)。我猜您在处理 phiên họp 时错过了最重要的功能之一。

   func webView(_ webView: WKWebView, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
print(#function)
completionHandler(.performDefaultHandling,nil)
}

有不同类型的 AuthChallengeDisposition ,比如

public enum AuthChallengeDisposition : Int {


case useCredential

case performDefaultHandling

case cancelAuthenticationChallenge

case rejectProtectionSpace
}

完整的WKNavigationDelegate协议(protocol)是

  extension ViewController: WKNavigationDelegate{
func webViewWebContentProcessDidTerminate(_ webView: WKWebView) {
print(#function)
}

func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) {
print(#function)
}

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
print(#function)
}

func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
print(#function)
}

func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {
print(#function)
}

func webView(_ webView: WKWebView, didReceiveServerRedirectForProvisionalNavigation navigation: WKNavigation!) {
print(#function)
}

func webView(_ webView: WKWebView, didFailProvisionalNavigation navigation: WKNavigation!, withError error: Error) {
print(#function)
}

func webView(_ webView: WKWebView, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) {
print(#function)
completionHandler(.performDefaultHandling,nil)
}

func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
print(#function)
decisionHandler(.allow)
}

func webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse, decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void) {
print(#function)
decisionHandler(.allow)
}
}

关于ios - 将 UIWebView 委托(delegate)迁移到 WKWebView 委托(delegate)方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46171410/

29 4 0
Chứng chỉ ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com
Xem sitemap của VNExpress