WKWebView 中的跟踪导航不适用于按钮单击
Tracking navigation in WKWebView doesn't work for button click
我正试图在我的网络视图中捕获按钮点击。如果我可以这样说,按钮“动作”会触发某些 url...我真的无法通过 WKNavigationDelegate 捕捉到这一刻。 webview 是这样设置的:
lazy var advertWebKitView: WKWebView = {
let webConfiguration = WKWebViewConfiguration()
let preferences = WKPreferences()
preferences.javaScriptEnabled = true
webConfiguration.preferences = preferences
let webView = WKWebView(frame: .zero, configuration: webConfiguration)
webView.navigationDelegate = self
webView.uiDelegate = self
webView.translatesAutoresizingMaskIntoConstraints = false
return webView
}()
我正在尝试像这样捕捉按钮点击:
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
decisionHandler(.allow)
guard let urlAsString = navigationAction.request.url?.absoluteString.lowercased() else {
return
}
if urlAsString.range(of: "...") != nil {
}
}
但是单击按钮时不会触发此方法。
在 android 上,它的工作原理是这样的:
@Override
public void doUpdateVisitedHistory(WebView view, String url, boolean isReload) {
if (url.equals("...")) {
finish();
}
//...
super.doUpdateVisitedHistory(view, url, isReload);
}
通过 wkwebview 正确跟踪导航的方法和方法是什么?
编辑:
如果需要有关网页结构的一些信息,请询问详细信息,我也会添加。我只是不知道哪些信息可能相关或有帮助。
按钮 html 如下所示:
<a class="lc-button lc-button--light" href="/close">OK</a>
还有一件有趣的事情是,我曾尝试在其他网站上使用我的代码,并且正确触发了导航委托方法。这让我觉得问题出在我们的网站及其 html 代码或有关单击按钮后页面加载方式的问题,也许...
我自己正在使用它并且它有效,它与您目前正在尝试的略有不同,但与 Android 方法相当。
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
if let requestURL = navigationAction.request.url, requestURL.pathComponents.contains("...") {
//Do your things
decisionHandler(.cancel)
return
}
decisionHandler(.allow)
}
首先在viewDidLoad
、
设置委托
self.webView.navigationDelegate = self
您可以通过实施来了解按钮将您导航到的位置
WKNavigationDelegate 函数,didFinish navigation
extension YourViewController: WKNavigationDelegate{
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
if let currentURL = webView.url{
if self.urlString == currentURL.absoluteString{
print(self.urlString)
}
}
}
}
在 React 路由器中使用 RedirectTo 而不是 LinkTo 重定向到 /close
我正试图在我的网络视图中捕获按钮点击。如果我可以这样说,按钮“动作”会触发某些 url...我真的无法通过 WKNavigationDelegate 捕捉到这一刻。 webview 是这样设置的:
lazy var advertWebKitView: WKWebView = {
let webConfiguration = WKWebViewConfiguration()
let preferences = WKPreferences()
preferences.javaScriptEnabled = true
webConfiguration.preferences = preferences
let webView = WKWebView(frame: .zero, configuration: webConfiguration)
webView.navigationDelegate = self
webView.uiDelegate = self
webView.translatesAutoresizingMaskIntoConstraints = false
return webView
}()
我正在尝试像这样捕捉按钮点击:
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
decisionHandler(.allow)
guard let urlAsString = navigationAction.request.url?.absoluteString.lowercased() else {
return
}
if urlAsString.range(of: "...") != nil {
}
}
但是单击按钮时不会触发此方法。
在 android 上,它的工作原理是这样的:
@Override
public void doUpdateVisitedHistory(WebView view, String url, boolean isReload) {
if (url.equals("...")) {
finish();
}
//...
super.doUpdateVisitedHistory(view, url, isReload);
}
通过 wkwebview 正确跟踪导航的方法和方法是什么?
编辑: 如果需要有关网页结构的一些信息,请询问详细信息,我也会添加。我只是不知道哪些信息可能相关或有帮助。
按钮 html 如下所示:
<a class="lc-button lc-button--light" href="/close">OK</a>
还有一件有趣的事情是,我曾尝试在其他网站上使用我的代码,并且正确触发了导航委托方法。这让我觉得问题出在我们的网站及其 html 代码或有关单击按钮后页面加载方式的问题,也许...
我自己正在使用它并且它有效,它与您目前正在尝试的略有不同,但与 Android 方法相当。
func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
if let requestURL = navigationAction.request.url, requestURL.pathComponents.contains("...") {
//Do your things
decisionHandler(.cancel)
return
}
decisionHandler(.allow)
}
首先在viewDidLoad
、
self.webView.navigationDelegate = self
您可以通过实施来了解按钮将您导航到的位置
WKNavigationDelegate 函数,didFinish navigation
extension YourViewController: WKNavigationDelegate{
func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
if let currentURL = webView.url{
if self.urlString == currentURL.absoluteString{
print(self.urlString)
}
}
}
}
在 React 路由器中使用 RedirectTo 而不是 LinkTo 重定向到 /close