ios - 如何在WKWebView中重写urlRequest

标签 ios swift wkwebview

我是 ios、swift 和 Xcode 的新手。

我有一个 WKWebView 组件。我想在 onClick 时添加一些 header ,以重定向到 WKWebView 中的另一个页面。如何覆盖或添加 header ?如果在 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 v. 9.3

最佳答案

我已经找到了解决方案:

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)

        }

    }

关于ios - 如何在WKWebView中重写urlRequest,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50448913/

相关文章:

ios - 当应用程序处于后台时处理本地通知

ios - Lockito 类应用程序,用于在 iOS 上模拟/伪造位置

ios - 为什么我的 UITextView 没有显示在我的 Swift/iOS 应用程序的自定义表格单元格中?

ios - 位置管理器(_ :​did​Change​Authorization:​) executes when app first runs?

ios - 如何监听 WKWebView 的 Zoom in/out 事件

ios - 在 WKWebView 中将 EstimatedProgress/ProgressView 变成进度条

swift - wkwebview 自动填写登录表单 swift 2

ios - InApp 购买 verifyReceipt(错误 -42351)

ios - 在 react-native 中打开键盘时,ScrollView 无法滚动到底部。 [IOS]

ios - 当应用程序在后台使用 Swift 3 时如何在 iOS 10 中播放声音