【问题标题】:WKWebview load local html file and deep link enter to target pageWKWebview 加载本地 html 文件和深度链接进入目标页面
【发布时间】:2019-04-18 20:22:14
【问题描述】:

我的应用中有一个 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];
}

【问题讨论】:

    标签: html ios objective-c wkwebview deep-linking


    【解决方案1】:

    你必须实现WKNavigationDelegate的方法decidePolicyForNavigationAction

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

    【讨论】:

      【解决方案2】:

      你应该在你的课堂上实现WKNavigationDelegate

      这里有一些有用的代表。 (委托是用 Swift 编写的。相同的委托在 objective 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)")
          }
      

      您可以在这些函数中编写您的逻辑。

      了解Visit here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-12-26
        • 2017-05-24
        • 2018-01-19
        • 2020-01-18
        • 2021-07-13
        • 2018-01-29
        • 1970-01-01
        • 2019-09-25
        相关资源
        最近更新 更多