我想加载一个网页,然后能够在用户登录并重定向后检索当前网页。我已经完成了网页的加载,但在用户移动到新页面后无法检索到该URL。我当前的代码是:
@IBOutlet weak var webView: UIWebView!
override func viewDidLoad() {
super.viewDidLoad()
// Do any additional setup after loading the view, typically from a nib.
needlogin()
}
func needlogin(){
let url = URL(string: "https://www.instagram.com/oauth/authorize/?client_id="+clientid+"&redirect_uri="+redirecturl+"&response_type=token&scope=likes+comments+public_content+follower_list+relationships")
let urlrequest = URLRequest(url: url!)
webView.loadRequest(urlrequest)
self.webView.delegate = self
}
func webViewDidFinishLoad(_ webView: UIWebView){
}
我遇到的问题是self.webView.delegate = self
。我收到错误消息:
无法指定“ViewController”类型的值来键入 'UIWebViewDelegate?'
此外,我根本不知道如何检索网址,并感谢您的帮助。
答案 0 :(得分:0)
您需要符合UIWebviewDelegate协议。所以你需要做类似
的事情class ViewController: UIViewController, UIWebViewDelegate {
}
位于类定义的顶部。
要在webview加载完成后检索URL,请在webViewDidFinishLoad方法中执行类似webView.request.URL的操作。
免责声明:对于iOS +应用程序,您应该使用WKWebview而不是UIWebview。对你的例子来说,这样做的方式就是这样:
import UIKit
import WebKit
class WebviewController: UIViewController, WKNavigationDelegate {
var wkWebview : WKWebView?
override func viewDidLoad() {
super.viewDidLoad()
needsLogin()
}
func needsLogin() {
wkWebview = WKWebView.init(frame: self.view.bounds)
wkWebview?.navigationDelegate = self
self.view.addSubview(wkWebview!)
let url = URL(string: "https://www.instagram.com/oauth/authorize/? client_id="+clientid+"&redirect_uri="+redirecturl+"&response_type=token&scope=likes+comments+public_content+follower_list+relationships")
let urlRequest: URLRequest = URLRequest.init(url: url!)
wkWebview?.load(urlRequest)
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
public func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {
print("\(error.localizedDescription)")
}
public func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
// This is the URL you need.
let url = webView.url
}
}