簡體   English   中英

如何在WKWebView中覆蓋urlRequest

[英]How to override urlRequest in WKWebView

我是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的鏈接,標題將消失。

所以,我很高興任何人都可以幫助我...

環境:

  • XCode 9.3版
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
}

我已經找到了解決方案:

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)

        }

    }

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM