我想知道如何子类化 UIWebView 来附加用户访问的每个链接,并在末尾添加一个字符串,如“=Human”。需要明确的是,如果用户访问 Yahoo.com,然后单击任何链接,末尾仍会带有“=Human”。
最佳答案
I could subclass UIWebView
但是docs说:
A WKWebView object displays interactive web content, such as for an in-app browser.
For new development, employ this class instead of the older UIWebView class.
这对我有用:
import UIKit
import WebKit
class WebViewController: UIViewController,
WKNavigationDelegate {
var webView: WKWebView!
override func loadView() {
let webView = WKWebView()
webView.navigationDelegate = self
view = webView
let defaultUrl = NSURL(
string: "https://www.yahoo.com"
)
if let validDefaultUrl = defaultUrl {
let yahooRequest = NSURLRequest(URL: validDefaultUrl)
webView.loadRequest(yahooRequest)
}
}
//MARK: - WKNavigationDelegate methods:
func webView(webView: WKWebView,
decidePolicyForNavigationAction navigationAction: WKNavigationAction,
decisionHandler: (WKNavigationActionPolicy) -> Void)
{
print("[me]: In WKWebView delegate method")
if navigationAction.navigationType == .LinkActivated {
print("[me]: User clicked on a link.")
let request = navigationAction.request
if let url = request.URL,
newURL = NSURL(string: url.absoluteString + "=User")
{
print("[me]: New url is valid.")
print("[me]: New url is \(newURL.absoluteString)")
let newRequest = NSMutableURLRequest(URL: newURL)
decisionHandler(.Cancel)
webView.loadRequest(newRequest)
}
}
decisionHandler(.Allow)
}
}
编辑:实际上,由于某种原因,每次单击链接时,代码都不会进入 if navigationAction.navigationType == .LinkActivated
block 。有时我只看到输出:
[me]: In WKWebView delegate method
我看不到输出:
[me]: User clicked on a link.
关于ios - 子类 UIWebView 以附加每个链接(在 Swift 中),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36511741/