Home > front end >  why I can’t open a App Store link inside a web view?
why I can’t open a App Store link inside a web view?

Time:01-27

I'm getting always this error :

WebPageProxy::didFailProvisionalLoadForFrame: frameID=3, domain=WebKitErrorDomain, code=102

Normal links are working but the AppStore one is not working

what I want is the Link to open the AppStore I can't do it locally because the web is loaded from a Qualtrics web.

I try it adding the navigationAction function but that doesn't work, what I'm guessing is that maybe the request is taking some time and i need a way of load that data on an async way but to be honest i really dont know

import SwiftUI
import WebKit

struct WebView: UIViewRepresentable {
    let html = """


<a href="https://apps.apple.com/us/app/directorio-notarios-cdmx/id1544000342"> Appstore link dont open</a></span></span><br />

<a href="https://landercorp.mx" rel="noopener"> Normal link </a></span></span><br />
"""

    var loadStatusChanged: ((Bool, Error?) -> Void)? = nil

    func makeCoordinator() -> WebView.Coordinator {
        Coordinator(self)
    }

    func makeUIView(context: Context) -> WKWebView {
        let view = WKWebView()
        view.navigationDelegate = context.coordinator
        view.loadHTMLString(html, baseURL: nil)
        return view
    }



    func updateUIView(_ uiView: WKWebView, context: Context) {
    }

    class Coordinator: NSObject, WKNavigationDelegate {
        let parent: WebView

        init(_ parent: WebView) {
            self.parent = parent
        }

        
    }
}
 

struct ContentView: View {
    var body: some View {
        WebView()
    }
}

struct ContentView_Previews: PreviewProvider {
    static var previews: some View {
        ContentView()
    }
}

CodePudding user response:

Some links on tapping them might activate actions / redirect with url schemes that are non HTTPs like

  • _blank to open a new tab
  • mailto to launch the mail application
  • some other deep link techniques familiar to device OSs

I believe the app store link uses a combination of the above and WKWebView cannot handle non HTTPs schemes.

What you can do is to listen to URLs that fail using WKNavigationDelegate and handle them accordingly

I am not using SwiftUI but I think you can get the picture.

Set up using the same HTML as you with both the links

class ViewController: UIViewController, WKNavigationDelegate
{
override func viewDidAppear(_ animated: Bool)
    {
        super.viewDidAppear(animated)
        
        let html = """
        <a href="https://apps.apple.com/us/app/directorio-notarios-cdmx/id1544000342"> Appstore link dont open</a></span></span><br />

        <a href="https://landercorp.mx" rel="noopener"> Normal link </a></span></span><br />
        """
        
        let webview = WKWebView()
        webview.frame = view.bounds
        webview.navigationDelegate = self
        view.addSubview(webview)
        webview.loadHTMLString(html, baseURL: nil)
    }
}

Then I implement these WKNavigationDelegate functions

  1. decidePolicyFor navigationAction Open WKWebview target="_blank" mailto deeplink new tab app store link or open an App Store link inside a web view

  •  Tags:  
  • Related