[英]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.