2016-07-19 21 views
3

Wenn Benutzer auf einen universellen Link in WKWebView tippen, wird die entsprechende App geöffnet (falls installiert).Verhindern, dass universelle Links in `WKWebView` /` UIWebView` öffnen

Dies beschrieben wird, in Apple Search Programming Guide

Wenn Sie ein SFSafariViewController, WKWebView oder UIWebView Objekt instanziiert eine universelle Verbindung zu handhaben, öffnet iOS Ihre Website in Safari statt Ihre App zu öffnen. Wenn der Benutzer jedoch über einen eingebetteten SFSafariViewController-, WKWebView- oder UIWebView-Objekt auf eine universelle Verknüpfung tippt, öffnet iOS Ihre App.

In meiner Anwendung habe ich ein WKWebView, aber ich will nicht der Benutzer aus meiner App zu gehen. Ich möchte den Link innerhalb meiner WKWebView behandeln.

Wie verhindere ich, dass Universal Link geöffnet wird? Oder kann ich wissen, ob eine URL von anderen Apps verarbeitet werden kann?

Antwort

5

Sourcecode für WebKit-Datei:

static const WKNavigationActionPolicy WK_API_AVAILABLE(macosx(10.11), ios(9.0)) _WKNavigationActionPolicyAllowWithoutTryingAppLink = (WKNavigationActionPolicy)(WKNavigationActionPolicyAllow + 2);

wenn Sie WKWebView arbeiten, verwenden Sie nur WKNavigationActionPolicyAllow + 2 statt WKNavigationActionPolicyAllow

+0

Können Sie erklären, wie es funktioniert? – khunshan

+0

https://hk.saowen.com/a/823c8dfb3724e95613cdbb06ed3f8e09d1e69d5d56e9d449f12a523b3d2a2b03 Dieser Blog ist mehr Details darüber. und die Art, wie wir anwenden: 'func webView (_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {return decisionHandler ((WKNavigationActionPolicy (rawValue: WKNavigationActionPolicy.allow.rawValue + 2)!))} ' – hoangtuanfithou

+0

Ich habe bestätigt, dass es funktioniert. Hacky Weg – hoangtuanfithou

1

+ [LSAppLink openWithURL: completionHandler:] Dies ist, wie Universal Link entsprechende App öffnen. Sie können ihre Implementierungen mit sich selbst Methode austauschen, aber seien Sie vorsichtig, das ist private API.

können Sie überprüfen, LSAppLink Kopf here

0

Base auf @none Antwort, hier ist ein Beispiel für Swift 4

Ich habe es getestet und es funktioniert!

func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) { 
    decisionHandler(WKNavigationActionPolicy(rawValue: WKNavigationActionPolicy.allow.rawValue + 2)!) 
} 
+0

funktioniert nicht mehr für iOS 11. Außerdem ist es eine private API. – xtools

+0

funktioniert es für iOS 11 –