Eröffnung tel: - links von UIWebView
Ich habe gesucht und gesucht, aber ich kann nicht scheinen zu finden, ein fix für dieses problem.
Aus irgendeinem Grund, ich kann nicht "tel:" links zu arbeiten, die in einer UIWebView. Wenn die links angeklickt werden, wird die Meldung "Die URL kann nicht angezeigt werden" erscheint. Klick auf den gleichen link in Safari funktioniert einwandfrei und wählt die Nummer.
Dieses problem begann mit iOS 5. Diese links funktionierte perfekt in iOS 4.2 und 4.3.
Ich bin mir nicht sicher, welche anderen Informationen, die nützlich sein könnten, so bitte lassen Sie mich wissen, wenn ich brauche zu klären.
Dank!
EDIT:
Hier ist der eigentliche code...
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
NSURL *url = request.URL;
if ([url.scheme isEqualToString:@"tel"]) {
return YES;
}
if (![url.scheme isEqualToString:@"http"] && ![url.scheme isEqualToString:@"https"]) {
if ([[UIApplication sharedApplication] canOpenURL:url]) {
[[UIApplication sharedApplication] openURL:url];
return NO; //Let OS handle this url
}
}
[NSThread detachNewThreadSelector:@selector(startBusy) toTarget:self withObject:nil];
return YES;
}
Wenn ich die erste if-Anweisung, die Nummer wird sofort gewählt mit keine Bestätigung. Ich würde wirklich, wie es funktioniert, wie es verwendet, um, indem Sie eine Warnmeldung, die Ihnen die Möglichkeit zum Treffer, die entweder "Call" oder "Abbrechen" vor dem wählen der Nummer.
Ja - die links sehen aus wie tel:########## (Mit tatsächlichen zahlen und nicht die "hash" - symbol). Einige haben Striche, aber ob oder nicht, Sie scheint nicht, einen Unterschied zu machen.
InformationsquelleAutor Jeremy Vanderburg | 2011-11-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn das starten als HTML-link, der tel-URL-Schema wird geöffnet, wenn Sie angezeigt als:
Wenn Sie starten, von einem native URL-string (d.h. man codiert diese in Objective-C und sind nicht dazu dient, über eine WebView), URL-Zeichenfolge sollte wie folgt Aussehen:
Hinweis: Dies funktioniert nur mit iOS-Geräten, die Telefon-app installiert ist (das bedeutet, dass iPhone nur). iPad & iPod Touch-Geräten wird eine Warnung angezeigt.
Hinweis 2: Gewährleisten die Telefonnummern, die Sie auf der Durchreise sind keine Leerzeichen oder andere Sonderzeichen (z.B. * und #).
Code Feedback
Basierend auf deinem code sind die Dinge ein bisschen klarer jetzt. Ihr Kommentar darüber, dass nichts passiert, wenn Sie lassen Sie die erste
if
- Anweisung in dershouldStartLoadWithRequest
Methode (wo Sie zurückYES
). Das ist genau das Verhalten, das Sie sollte sehen, weil die app nicht die Telefon-app. Nur die Telefon-app kann mit dentel:
URL-Schema. Durch RücksendungYES
sagen Sie das OS, dass die app mit der Telefon-Anruf, aber es kann nicht. Sie bekommen den Anruf, wenn das bedingte entfernt wird, da der nächste block, die überprüftif ([[UIApplication sharedApplication] canOpenURL:url])
ermöglicht diesharedApplication
(in diesem Fall ist die Telefon-app) zu starten, den call., Wie die Dinge Funktionieren & Was Sie Wollen
Des OS ist nicht zu behandeln, zeigt die Anruf - /Abbrechen-alert-dialog für Sie. Das ist bis zu Ihnen. Es zeigt sich in Safari, weil der Safari-app
shouldStartLoadWithRequest
Methode zweifellos reagiert auf dietel:
Schema zeigt einUIAlertView
. Ihre Bedingung fürif ([url.scheme isEqualToString:@"tel"])
sollte, wennYES
-, trigger-einUIAlertView
mit einer Call-und Abbrechen-button. Auf Rufen, Sie wird Ihnen sagen, diesharedApplication
zuopenURL
; auf Abbrechen, werden Sie nicht rufen & Sie wollen auch zurückNO
so dass Ihre app wird nicht versucht, dieloadWithRequest
.Selbst-Korrektur Bearbeiten
Fair zu sein, über Fehler in meinen eigenen Denkprozess, ich verlasse meine Antworten oben.
Ich glaube, dass Sie die Anruf - /Abbrechen-dialog ist in der Tat ein feature des OS. Entschuldigung für die Ungenauigkeit.
Ich würde auch fälschlicherweise blickte über Ihren code die passing off-URL-handling, um sharedApplication nur Auftritt, wenn das Schema war
http
oderhttps
.Nach einem weiteren Blick auf den code, ich Frage mich, wenn durch Zufall Sie die debug-Optionen in Safari? Ich glaube, das verhindert, dass der Alarm aus aufspringen. Auch--nur zu überprüfen, die offensichtlich-Sie sind nicht versuchen, diese innerhalb des Simulators, richtig? Was passiert, wenn Sie entfernen Sie die bedingte überprüfen
http
/https
und verwenden nur diecanOpenURL
überprüfen?Jedoch, abgesehen von dem Fehler in meinen Kommentaren auf die bedingte & dialog selbst, sollten Sie immer noch nicht zurück
YES
. Um einen Anruf zu tätigen, sollten Sie nur in der Lage sein zu ziehen, dass off, indem Sie es zusharedApplication:openURL
und sicherstellen, dass Sie zurückNO
weil die app nicht die Telefon-app. Der einzige Grund, warum Sie wollen würde, um zurückYES
bei dieser Methode ist, wenn Sie Ihre app Griff eintel:
link auf eine spezielle Weise, die nicht die Zusendung an die Telefon-app.Pflege zu teilen einige aktuelle code, wie Sie sind, handling der UIWebView in Ihrer Anwendung? Können Sie starten, andere URL-Schemata erfolgreich aus Ihrer app UIWebView? EDIT: genauer gesagt, behandeln Sie die shouldStartLoadWithRequest:navigationType Methode in Ihrer UIWebViewDelegate, um richtig zu starten, den link außerhalb Ihrer app?
Ich Schnitt die Frage an den code, sowie ein paar mehr details. Danke!
Ich bearbeitet meine Antwort mit mehr details & Anregungen.
Ich habe das debugging im Safari deaktiviert, aber kein popup. Aber ich werde mir sorgen machen, dass zu einem anderen Zeitpunkt. Deine Erklärung hilft aber...danke!
InformationsquelleAutor bobwaycott
Wenn Sie die UIWebView in einem .xib, wählen Sie die UIWebView und überprüfen Sie die Attribute in der Attribut-Inspektor. Die erste überschrift sollte "Web-Ansicht" und unter, dass es enthält eine Liste der Kontrollkästchen mit der Aufschrift "Erkennung". Sorgen, dass "Telefon-Nummern" aktiviert ist.
HTML
Seite mit denanchor
tagInformationsquelleAutor Jezen Thomas