WKWebview загрузить локальный HTML-файл и глубокая ссылка войти на целевую страницу - PullRequest
1 голос
/ 18 апреля 2019

У меня есть приложение WKWebview и я загружаю локальный файл .html.
Я хочу использовать глубокую ссылку, чтобы перенаправить определенную страницу.
Я не знаю, как это сделать.
Ребята, у вас есть идеи по этому поводу? Пожалуйста, скажите мне решение?

Пример глубокой ссылки:

helloAPP: //index.html#/article/list/123345

Код:

@property (strong, nonatomic) IBOutlet WKWebView *webView;

- (void)viewDidLoad {

    self.webView = [self.webView initWithFrame:[UIScreen mainScreen].bounds configuration:[self createWKWebApp]];
    [self.webView setNavigationDelegate:self];
    [self.webView setUIDelegate:self];
    [self.webView.configuration.preferences setValue:@YES forKey:@"allowFileAccessFromFileURLs"];
    self.webView.scrollView.bounces = NO;
    [self.webView setContentMode:UIViewContentModeScaleAspectFit];

    NSURL *url = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"index" ofType:@"html" inDirectory:@"www/phoneApp"]];

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url cachePolicy:NSURLRequestReloadIgnoringLocalCacheData timeoutInterval:180];
    [request setHTTPMethod:@"POST"];

    [self.webView loadRequest:request];
}

Ответы [ 2 ]

1 голос
/ 18 апреля 2019

Вы должны реализовать метод decidePolicyForNavigationAction из WKNavigationDelegate.

- (void) webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler {
    if ([navigationAction.request.URL.scheme isEqualToString:@"helloAPP"]){
        // Open app page based on the url 
        decisionHandler(WKNavigationActionPolicyCancel);
        return;
    }
    decisionHandler(WKNavigationActionPolicyAllow);
}
0 голосов
/ 18 апреля 2019

Вы должны реализовать WKNavigationDelegate в своем классе.

Вот несколько полезных делегатов. ( Делегаты записаны в Swift . Те же делегаты доступны в цель C .)

// MARK:- WebKit Navigation Delegate

    func webView(_ webView: WKWebView, didStartProvisionalNavigation navigation: WKNavigation!) {
            print("didstart called")
           //Here you can open url.
            UIApplication.shared.open((webView.url)!, options: [:], completionHandler: nil)

    }

    func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) {
            print("didFinish navigation: \(navigation)")
    }

   func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
            decisionHandler(.allow)
   }
   func webView(_ webView: WKWebView, didReceiveServerRedirectForProvisionalNavigation navigation: WKNavigation!) {
        print("didReceiveServerRedirectForProvisionalNavigation navigation: \(navigation)")
   }

    func webView(_ webView: WKWebView, didCommit navigation: WKNavigation!) {
        print("didCommit: \(navigation)")
    }
    func webView(_ webView: WKWebView, didFail navigation: WKNavigation!, withError error: Error) {
        print("loading Error: \(error)")
    }

Вы можете написать свою логику в этих функциях.

Чтобы узнать о Посетите здесь .

...