我是 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/