代码之家  ›  专栏  ›  技术社区  ›  Rudi Wijaya

如何在WKWebView中重写URL请求

  •  0
  • Rudi Wijaya  · 技术社区  · 8 年前

    我是ios、swift和Xcode的新手。

    我有一个组成部分 WKWebView onClick 用于重定向到中的其他页面 WKWebView Android 版本,我可以这样做:

    webView.setWebViewClient(new WebViewClient() {
    
           :
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest url) {
                if (android.os.Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
                    view.loadUrl(url.getUrl().toString(), extraHeader);
                }
                return true;
            }
    
            :
    
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, String url) {
                if (android.os.Build.VERSION.SDK_INT < Build.VERSION_CODES.N) {
                    view.loadUrl(url, extraHeader);
                }
                return true;
    
            }
    
            :
    }
    

    我已经这样做了:

    override func viewDidLoad() {
    
            super.viewDidLoad()
    
            // Do any additional setup after loading the view, typically from a nib.
    
    
            let url = URL(string: BASE_URL)
    
            let request = NSMutableURLRequest(url: url!)
    
            request.addValue(MOBILE, forHTTPHeaderField: X_CLIENT_TYPE)
    
    
    
            self.webView.load(request as URLRequest)
    
     }
    

    但是,上面的代码仅用于首次加载。如果我在中单击一个链接 ,标题不见了。

    环境:

    2 回复  |  直到 8 年前
        1
  •  3
  •   Rudi Wijaya    8 年前

    我已经找到了一个解决方案:

    func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
    
            print("decidePolicyFor")
    
            let request = navigationAction.request
    
            print("request: ", request)
    
    
    
            if ( (request.url?.absoluteString.hasPrefix(BASE_URL))! && request is NSMutableURLRequest) {
    
                print("NSMutableURLRequest")
    
                let mutableRequest = request as! NSMutableURLRequest;
    
                let clientType = mutableRequest.value(forHTTPHeaderField: X_CLIENT_TYPE) as String?
    
                print("clientType: ", clientType)
    
    
    
                if (clientType != nil && clientType == MOBILE) {
    
                    print("client type is MOBILE")
    
                } else {
    
                    print("add client type MOBILE")
    
                    mutableRequest.addValue(MOBILE, forHTTPHeaderField: X_CLIENT_TYPE)
    
                    webView.load(mutableRequest as URLRequest)
    
                }
    
                decisionHandler(WKNavigationActionPolicy.allow)
    
            } else {
    
                print("NOT NSMutableURLRequest")
    
    
    
                decisionHandler(WKNavigationActionPolicy.allow)
    
            }
    
        }
    
        2
  •  1
  •   Jignesh Mayani    8 年前
    var request = URLRequest(url: URL(string: url)!)
    request.httpMethod = "POST"
    // If you have post parameter pass here 
    let postString = "key=\(Value!)&Key=\(Value!)"
    request.httpBody = postString.data(using: .utf8)
    
    // Set your Header here   
    request.setValue("MOBILE", forHTTPHeaderField:"X_CLIENT_TYPE")
    
     if request != nil
        {
            webView.loadRequest(request)
            webView.delegate = self     
        }
    

    你可以做第二次点击

    func webView(_ webView: UIWebView, shouldStartLoadWith request: URLRequest, navigationType:
        UIWebViewNavigationType) -> Bool
    {
        var Myrequest  = URLRequest.init(url: request.url!)
    
        Myrequest.setValue("MOBILE", forHTTPHeaderField:"X_CLIENT_TYPE")
    
        webView.loadRequest(Myrequest)
    
        true
    }