How can I get UIWebView to open Facebook login page in response to the OAuth request on iOS 5 and iOS 6?

后端 未结 5 1305
Happy的楠姐
Happy的楠姐 2020-12-15 13:30

We have:
(1) Facebook API-based web application with Facebook OAuth functionality (“the FB web app”)
(2) UIWebView-based browser on iPad (“the Browser”

5条回答
  •  甜味超标
    2020-12-15 13:51

    How to facebook login in UIWebView.

    Objective-c

    Use taylorstine's answer. He saved my day. Thank you taylorstine

    But I'm using Swift 3. so I just converted code below from taylorstine's answer.

    Swift 3.

    func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType: UIWebViewNavigationType) -> Bool {
    
        if let _ = request.url?.absoluteString.range(of: "m.facebook.com" ) {
            if let _ = request.url?.absoluteString.range(of: "back"){
                self.popUp?.removeFromSuperview()
                self.popUp = nil
                return false
            }
    
            if let _ = self.popUp {
                return true
            }
    
            let wv = popUpWebView()
            wv.loadRequest(request)
    
            return false
        }
    
        return true
    }
    
    func popUpWebView() -> UIWebView {
    
        let webView = UIWebView(frame: self.view.frame)
    
        webView.delegate = self
        self.popUp = webView
        self.view.addSubview(webView)
    
        return webView
    }
    
    func webViewDidFinishLoad(_ webView: UIWebView) {
        if let _ = self.popUp {
    
            let jsFromFile = "window.close=function(){window.location.assign('back://' + window.location);};"
    
            let _ = webView.stringByEvaluatingJavaScript(from: jsFromFile)
    
            let openerContext = self.webView.value(forKeyPath: "documentView.webView.mainFrame.javaScriptContext") as! JSContext
    
            let popupContext = webView.value(forKeyPath: "documentView.webView.mainFrame.javaScriptContext") as! JSContext
    
            popupContext.setObject("opener", forKeyedSubscript: "window" as (NSCopying & NSObjectProtocol)!)
            popupContext.setObject(openerContext.objectForKeyedSubscript("window"), forKeyedSubscript: "opener"  as (NSCopying & NSObjectProtocol)!)
    
        }
    
        if webView == self.popUp
            && (webView.request?.url?.absoluteString.range(of:"m.facebook.com") != nil)
            && webView.stringByEvaluatingJavaScript(from: "document.body.innerHTML") == "" {
    
            webView.stringByEvaluatingJavaScript(from: "eval(document.getElementsByTagName('script')[0].text)")
    
        }
    
    }
    

提交回复
热议问题