我正在使用带有UIWebView的UIViewController。在此UIWebView中,用户必须登录,成功登录后,应将用户重定向回应用程序。但在我的例子中,它停留在UIWebView中,不会将我重定向回应用程序。
我尝试在API Delegate中使用以下代码:
func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool {
DispatchQueue.main.async {
if (url.scheme == "go-back"){
let storyboard = UIStoryboard(name: "Main", bundle: nil)
let controller = storyboard.instantiateViewController(withIdentifier: "WebView") as! ViewController
self.window?.rootViewController!.present(controller, animated: true, completion: { () -> Void in
})
}
}
return true
}并创建了一个URL方案,但它不起作用。
发布于 2017-09-18 20:33:23
Step1 :
在你的ViewController中使用WKWebView而不是UIWebView。
Step2 :
让你的ViewController成为WKWebView的代表
webView.navigationDelegate = self
webView.uiDelegate = selfStep3 :
最后,在ViewController中实现WKNavigationDelegate
extension ViewController : WKNavigationDelegate{
func webView(
_ webView: WKWebView,
decidePolicyFor navigationAction: WKNavigationAction,
decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
guard let url = navigationAction.request.url else {
decisionHandler(.allow)
return
}
//now u and ur server team can decide on what url will they redirect and what will be url string on login success
//lets say u and ur server team decides url to be https://some_base_url/login/success
if url.absoluteString.contains("/login/success") {
// this means login successful
decisionHandler(.cancel)
_ = self.navigationController?.popViewController(animated: false)
}
else {
decisionHandler(.allow)
}
}
}编辑:
由于OP的代码有问题,我正在更新答案以解决此问题
import UIKit
import WebKit
class ViewController: UIViewController, WKUIDelegate, WKNavigationDelegate{
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://")
let myRequest = URLRequest(url: myURL!)
webView.load(myRequest)
}
func webView(
_ webView: WKWebView,
decidePolicyFor navigationAction: WKNavigationAction,
decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
guard let url = navigationAction.request.url else {
decisionHandler(.allow)
return
}
if url.absoluteString.contains("/login/success") {
// this means login successful
decisionHandler(.cancel)
_ = self.navigationController?.popViewController(animated: false)
}
else {
decisionHandler(.allow)
}
}
}发布于 2017-09-18 22:37:23
//导入UIKit导入WebKit
类ViewController: UIViewController,WKUIDelegate,WKNavigationDelegate{
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://")
let myRequest = URLRequest(url: myURL!)
webView.load(myRequest)
}}func webView(
_ webView: WKWebView,
decidePolicyFor navigationAction: WKNavigationAction,
decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
guard let url = navigationAction.request.url else {
decisionHandler(.allow)
return
}
if url.absoluteString.contains("/login/success") {
// this means login successful
decisionHandler(.cancel)
_ = self.navigationController?.popViewController(animated: false)
}
else {
decisionHandler(.allow)
}}
我使用下面这行代码得到了错误:
if url.absoluteString.contains("/login/success") {
// this means login successful
decisionHandler(.cancel)
_ = self.navigationController?.popViewController(animated: false)
}这说明使用未解析标识符"self“
https://stackoverflow.com/questions/46278844
复制相似问题