Как переопределить urlRequest в WKWebView - PullRequest
0 голосов
/ 21 мая 2018

Я новичок здесь для 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)

 }

Но приведенный выше код предназначен только для первой загрузки.Если я нажму на ссылку в WKWebView, заголовки исчезнут.

Так что я рад, что любой может мне помочь ...

env:

  • XCode v. 9,3

Ответы [ 2 ]

0 голосов
/ 22 мая 2018

Я уже нашел решение:

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)

        }

    }
0 голосов
/ 21 мая 2018
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
}
...