禁用 WKWebView 中的链接?

ele*_*cni 5 objective-c ios swift wkwebview

我想在 WKWebView 中加载页面,然后禁用其中的链接。大多数链接都是相对的。


尝试过webView:decidePolicyForNavigationAction:decisionHandler:,但新页面在调用之前加载,如果我使用,则不会出现相对链接navigationAction.request.URL。还尝试过UIDelegate,但根本没有加载。


有任何想法吗?Obj C 是首选,但 Swift 也可以。



编辑:

好的,我稍微改一下这个问题。

当用户按下链接时,我想停止 WKWebView 打开它,而是将该链接保存到数组中。如果满足某些条件,可以使用 loadrequest 手动打开它。

代码很简单

- (void)viewDidLoad {
    [super viewDidLoad];

    NSString *sURL = @"https://www.mytestingwebsite.com";
    NSURL *URL = [NSURL URLWithString:sURL];

    WKWebViewConfiguration *theConfiguration = [[WKWebViewConfiguration alloc] init];
    [self addUserScriptsToUserContentController:theConfiguration.userContentController];

    WKWebView *webView = [[WKWebView alloc] initWithFrame:self.view.frame configuration:theConfiguration];
    webView.navigationDelegate = self;
    webView.UIDelegate = self;
    //webView.allowsLinkPreview = TRUE;

    NSURLRequest *nsrequest=[NSURLRequest requestWithURL:URL];
    [webView loadRequest:nsrequest];
    [self.view addSubview:webView];
}
Run Code Online (Sandbox Code Playgroud)


他们在 WWDC 2014 视频 206 中使用NSURL *selectedURL = navigationAction.request.URL;来检测和禁用外部链接。但这显然对我不起作用。我刚刚添加了 NSLog 和断点来测试它。

pws*_*068 5

func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Swift.Void) {
    guard navigationAction.navigationType == .other || navigationAction.navigationType == .reload  else {
        decisionHandler(.cancel)
        return
    }
    decisionHandler(.allow)
}
Run Code Online (Sandbox Code Playgroud)


ele*_*cni 2

由于我无法想出更聪明的方法,所以我用 javascript 做到了。

基本上,您加载 js 文件,查找容器和链接,然后设置href="javascript:(void)"所需的链接。