首页 文章

禁用WKWebView中的链接?

提问于
浏览
3

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

尝试使用 webView:decidePolicyForNavigationAction:decisionHandler: ,但如果我使用 navigationAction.request.URL ,则会在's called and relative links don' t之前加载新页面 . 也尝试使用 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];
}

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

3 回答

  • 0
    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)
    }
    
  • 1

    由于我无法想出更聪明的东西,我用javascript做了 .

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

  • 0

    尝试:

    func webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse, decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void)
    {
        decisionHandler(navigationResponse.response.url?.absoluteString == mainLink ? .allow : .cancel)
    }
    

相关问题