3 Stimmen

Feststellen, ob ein Link in einer WebView angeklickt wurde - iPhone

Ich verwende eine benutzerdefinierte Webview, um eine Registerkartenleiste anzuzeigen, wenn der Benutzer auf die Webview berührt. Aber wenn ich auf einen Link in einem Webview geklickt, Tabbar wird für eine kurze Zeit angezeigt und dann Seite lädt. Ich bin mit dieser benutzerdefinierten Webview zu erkennen, berühren: http://github.com/psychs/iphone-samples/blob/b772b963f2acf18d478b41b44555992fcd8d4f31/WebViewTappingHack/Classes/PSWebView.m

Kann ich erkennen, ob ein Link angeklickt wurde oder nicht? Weil ein Link auf dem Webview steht, erkennt Webview die Berührung und lädt auch die Seite... Ich möchte das verhindern.

Vielen Dank im Voraus.

3voto

Ben S Punkte 66945

Verwendung von Javascript

Anstatt das Laden der Seite zu verhindern, würde ich Javascript in die Webansicht einbauen, damit das Berühren des Links nichts bewirkt.

Ich habe antwortete eine ähnliche Frage vor nicht allzu langer Zeit. Anstatt alle Links zu deaktivieren (wie bei der anderen Frage), suchen Sie einfach nach einem bestimmten Link, den Sie deaktivieren möchten, und entfernen seine href Attribut .

Verwendung eines UIWebview-Delegaten

Wenn Sie alternativ in der Lage sein wollen, auf den Versuch eines Benutzers, auf den Link zu klicken, zu reagieren (vielleicht um ihm eine Nachricht zu geben), können Sie den Delegaten der UIWebview festlegen und die webView:shouldStartLoadWithRequest:navigationType: Methode und Rückgabe NO wenn die URL, die geladen werden soll, diejenige ist, die Sie blockieren möchten.

Nebenbei bemerkt ist es in der Regel die beste Praxis, für diese Art von Ausschluss eine Whitelist statt einer Blacklist zu führen. Anstatt Links zu blockieren, die Sie nicht wollen, ist es vielleicht besser, alle Links zu blockieren, außer für diejenigen, von denen Sie wissen, dass Sie sie sicher ansteuern können.

0 Stimmen

Eigentlich möchte ich verhindern, dass die Tab-Leiste angezeigt wird und die Seite nicht geladen wird... Wenn der Benutzer auf die Webview berührt und wenn es Link ist, die berührt, dann möchte ich nicht die Tabbar zeigen, aber wenn es NICHT Link ist, möchte ich Tabbar zeigen... Ich hoffe, es ist jetzt klarer.

3voto

MCMatan Punkte 8057

UIWebViewNavigationTypeLinkClicked = Sagt Ihnen, wenn ein Link angeklickt wurde. Prüfen Sie nur, wenn Sie den

self.webView.delegate = self;

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    if (navigationType == UIWebViewNavigationTypeLinkClicked) {
        [[UIApplication sharedApplication] openURL:request.URL];
        return NO;
    }
    return YES;
}

0voto

Uygar Y Punkte 1932

OK, ich habe einen Workaround gemacht und selbst gelöst...

Meine Links sind am oberen und unteren Rand der Seite, so habe ich Bildschirmkoordinaten durch den folgenden Code und wenn pos.y < einige Wert und pos.y > einige Wert dann nicht das Menü anzeigen...

UITouch * touch = [touches anyObject];
CGPoint pos = [touch locationInView: [UIApplication sharedApplication].keyWindow];
NSLog(@"Position of touch: %.3f, %.3f", pos.x, pos.y);

Hoffentlich hilft das jemandem...

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X