2017-04-12 5 views
1

Gibt es eine Möglichkeit, Interaktionen in einer Webansicht zu deaktivieren? Damit der Benutzer nicht weiter als die geladene Webansicht gehen kann?WKWebview: Interaktion deaktivieren und auf Links klicken

EDIT: Deaktivieren von UserInteractions ist keine Lösung, da die Website noch scrollbar sein muss.

+0

können Sie Delegate Methoden von Webview implementieren. –

+1

Mögliches Duplikat von [Einschränkung der Benutzerinteraktion in UIWebView] (http://stackoverflow.com/questions/452961/restricting-user-interaction-in-uiwebview) –

Antwort

1

Umsetzung des WKNavigationDelegate Protokoll:

@interface ViewController() <WKNavigationDelegate> 

Stellen Sie Ihre WKWebView ‚s navigationDelegate Eigenschaft:

self.wkWebView.navigationDelegate = self; 

Dann die Richtlinie für die URL implementieren (en), die Sie einschränken möchten:

- (void)webView:(WKWebView *)webView decidePolicyForNavigationAction:(WKNavigationAction *)navigationAction decisionHandler:(void (^)(WKNavigationActionPolicy))decisionHandler { 

    if ([navigationAction.request.URL.absoluteString containsString:@"somedomain.com/url/here"]) { 
     decisionHandler(WKNavigationActionPolicyAllow); 
    } 
    else { 
     decisionHandler(WKNavigationActionPolicyCancel); 
    } 
} 
+0

Das Problem hier ist, wenn ich eine URL wie google.com ie und google.com/"etwas "sollte nicht geöffnet werden. Es funktioniert nicht mit containsString, aber ich kann die userInteractions nicht durch Scrollen trennen. – Secondwave

+0

Sie können in diesem Fall isEqualToString oder einen anderen Vergleich verwenden. –

0

Sie können es wie folgt tun.

//----------------------------------------------------------------------- 

#pragma mark - UIWebView Methods 

//----------------------------------------------------------------------- 

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { 



    return YES; 
} 

//---------------------------------------------------------------- 

- (void)webViewDidStartLoad:(UIWebView *)webView { 
//disable user interaction 
} 

//---------------------------------------------------------------- 

- (void)webViewDidFinishLoad:(UIWebView *)webView{ 
//enable user interaction 
} 

//---------------------------------------------------------------- 

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error{ 
    //enable user interaction 
} 
0

Diese JavaScript-Zeilen deaktivieren langes Drücken und Verknüpfen von Berührungen durch Überschreiben des HTML. Frame-basierte Dinge wie eingebettete Youtube-Videos funktionieren weiterhin.

func webView(_ webView: WKWebView, didFinish navigation: WKNavigation!) { 
    webView.evaluateJavaScript("document.documentElement.style.webkitUserSelect='none'") 
    webView.evaluateJavaScript("document.documentElement.style.webkitTouchCallout='none'") 
    webView.evaluateJavaScript("var elems = document.getElementsByTagName('a'); for (var i = 0; i < elems.length; i++) { elems[i]['href'] = 'javascript:(void)'; }") 
} 
Verwandte Themen