2016-08-27 30 views
2

WKWebViewでページを読み込み、その中のリンクを無効にしたいとします。ほとんどのリンクは相対的なものです。WKWebViewのリンクを無効にしますか?


webView:decidePolicyForNavigationAction:decisionHandler:と試みたが、それを呼び出して、私はnavigationAction.request.URLを使用した場合の相対リンクが表示されない前に新しいページがロードされます。また、UIDelegateで試してみると、まったく読み込まれませんでした。


Obj Cが優先されますが、SwiftもOKです。



EDIT:

OK、私は質問を少し言い換えます。

ユーザーがリンクを押すと、WKWebViewを開くためにWKWebViewを停止し、そのリンクを配列に保存します。特定の条件が満たされている場合は、loadrequestを使用して手動で開くこともできます。

コードは、彼らは外部リンクを検出し、無効にするには、WWDC 2014年にビデオ206 NSURL *selectedURL = navigationAction.request.URL;を使用しました

- (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

私はスマートなものを考え出すことができなかったので、私はjavascriptでそれをやりました。

基本的に、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) 
} 
関連する問題