成功登录网站后如何重定向到新的URL?

时间:2016-07-05 14:20:42

标签: xcode swift url uiwebview swift2

我是Xcode的新手,我希望使用UIWebView创建一个应用程序,它会将我带到具有登录页面的特定URL,并且在成功登录后我希望它重定向到特定的URL。这是我公司的一个网站,当我登录我们的网站时,我正在使这个应用程序变得轻松。我已经成功地创建了一个UIWebView,它将我带到登录页面,但不确定如何检测登录以重定向下一个URL。

2 个答案:

答案 0 :(得分:1)

此时您真的不应该使用UIWebView来获取新代码。而是使用WKWebView

您必须以编程方式将WKWebView添加到视图层次结构中。为此,请添加以下内容:

var webView:WKWebView?

required init?(coder aDecoder: NSCoder) {
    super.init(coder: aDecoder)

    self.webView = WKWebView(frame: CGRectZero)
    self.webView?.navigationDelegate = self
}

override func viewDidLoad() {
    super.viewDidLoad()

    if let webView = self.webView
    {
        view.insertSubview(webView, belowSubview: goButton)
        webView.translatesAutoresizingMaskIntoConstraints = false
        let height = NSLayoutConstraint(item: webView, attribute: .Height, relatedBy: .Equal, toItem: view, attribute: .Height, multiplier: 1, constant: -44)
        let width = NSLayoutConstraint(item: webView, attribute: .Width, relatedBy: .Equal, toItem: view, attribute: .Width, multiplier: 1, constant: 0)
        let offset = NSLayoutConstraint(item: webView, attribute: .Top, relatedBy: .Equal, toItem: goButton, attribute: .Bottom, multiplier: 1, constant: 0)
        view.addConstraints([height, width, offset])

完成后,您可以通过实施WKNavigationDelegate

来使用它
// MARK: - WKNavigationDelegate
func webView(webView: WKWebView, didReceiveServerRedirectForProvisionalNavigation navigation: WKNavigation!) {
    print("didReceiveServerRedirectForProvisionalNavigation")

    if ( self.webView!.URL?.absoluteString == "https://myserver.com/successurl" )
    {
        print("SUCCESS")
        self.webView!.stopLoading()
        // do something here, like remove this from the nav controller
        self.navigationController?.popViewControllerAnimated(true)
    }
}

func webView(webView: WKWebView, didCommitNavigation navigation: WKNavigation!) {
    print("didCommitNavigation - content arriving?")
}

func webView(webView: WKWebView, didFailNavigation navigation: WKNavigation!, withError error: NSError) {
    print("didFailNavigation")
}

func webView(webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
    print("didStartProvisionalNavigation \(navigation)")
}

func webView(webView: WKWebView, didFinishNavigation navigation: WKNavigation!) {
    print("didFinishNavigation")
    webView.evaluateJavaScript("document.documentElement.outerHTML.toString()",
                               completionHandler: { (html: AnyObject?, error: NSError?) in
                                //print(html)
    })
}

您可以在此处对流进行大量控制,正如您可以从委托中的所有协议方法中看到的那样。

答案 1 :(得分:0)

UIWebView有一个委托,您可以将其设置为实现UIWebViewDelegate协议的对象。您可以实施:

 func webView(_ webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType navigationType: UIWebViewNavigationType) -> Bool

在里面。因此,一种简单的方法是在承载Web视图的VC中实现。添加:

, UIWebViewDelegate 

到您的班级声明。

您需要将webView的委托属性设置为视图控制器。

然后添加此功能:

func webView(_ webView: UIWebView, shouldStartLoadWithRequest request: NSURLRequest, navigationType navigationType: UIWebViewNavigationType) -> Bool {
     // You can look at request and navigation type and decide to return 
     // false and redirect the webview yourself.
     // If the load is ok, return true.
}

如果您需要比此更多的控制,您可能需要查看此WebKit版本(WKWebView),这是新应用程序的首选Web视图,并具有许多用于控制它的功能。