2016-08-27 2 views
2

WKWebView에서 페이지를로드 한 다음 링크를 비활성화하려고합니다. 링크의 대부분은 상대적입니다. WKWebView에서 링크를 비활성화 하시겠습니까?


webView:decidePolicyForNavigationAction:decisionHandler:으로 시도하지만,이 호출과 내가 navigationAction.request.URL를 사용하는 경우 상대 링크가 표시되지 않습니다 전에 새 페이지가로드됩니다. 또한 UIDelegate으로 시도했지만 전혀로드되지 않았습니다.


아이디어가 있으십니까? Obj C가 선호되지만 Swift도 괜찮습니다.



편집 :

OK, 내가 질문을 조금 바꿔 것이다.

사용자가 링크를 누르면 WKWebView를 열어서 해당 링크를 배열에 저장하려고합니다. 특정 조건이 충족되면 loadrequest를 사용하여 수동으로 열 수 있습니다.

코드는 그들은, 비디오 (206) NSURL *selectedURL = navigationAction.request.URL; 감지하고 외부 링크를 사용하지 않도록 WWDC 2014 년에 사용했던

- (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]; 
} 


간단하다. 하지만 분명히 저를 위해 일하지 않습니다. 방금 NSLog와 중단 점을 추가하여 테스트했습니다.

+0

당신이'webView.allowsLinkPreview = FALSE '시도? – penatheboss

+0

시도해보십시오. 그러나 기본값은 false입니다. 그것이 사실이라면 누르십시오 만요.하지만 특정 조건이 충족되면 수동으로 열어서 수동으로 열려고합니다. – elektricni

+0

은 코드 식별을 위해 – user3182143

답변

0

나는 더 똑똑한 것을 생각해 낼 수 없었기 때문에, 나는 자바 스크립트로 그것을했다.

기본적으로 js 파일을로드하고 컨테이너와 링크를 찾고 원하는 링크에 href="javascript:(void)"을 설정합니다.

1

시도 :

func webView(_ webView: WKWebView, decidePolicyFor navigationResponse: WKNavigationResponse, decisionHandler: @escaping (WKNavigationResponsePolicy) -> Void) 
{ 
    decisionHandler(navigationResponse.response.url?.absoluteString == mainLink ? .allow : .cancel) 
} 
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) 
} 
관련 문제