W mojej aplikacji, gdy użytkownik doda obiekt, może również dodać łącze do tego obiektu, a następnie link można otworzyć w webView.
Próbowałem zapisać link bez prefiksu http: //, a następnie otworzyć go w webView, ale nie można go otworzyć!
Zanim rozpocznie się ładowanie WebView, czy istnieje metoda sprawdzania, czy zapisany URL ma przedrostek http: //? A jeśli go nie ma, jak mogę dodać przedrostek do adresu URL?
Dzięki!Sprawdź, czy adres URL ma przedrostek http: //
Odpowiedz
Można użyć metody - (BOOL)hasPrefix:(NSString *)aString
na NSString aby zobaczyć czy NSString zawierające adres URL zaczyna się od http: // prefiks, a jeśli nie dodać przedrostek.
NSString *myURLString = @"www.google.com";
NSURL *myURL;
if ([myURLString.lowercaseString hasPrefix:@"http://"]) {
myURL = [NSURL URLWithString:myURLString];
} else {
myURL = [NSURL URLWithString:[NSString stringWithFormat:@"http://%@",myURLString]];
}
Jestem obecnie z dala od mojego mac i nie mogę skompilować/przetestować tego kodu, ale uważam, że powyższe powinno zadziałać.
Nie jestem pewien, czy istnieje metoda, aby to sprawdzić, ale sprawdzenie go w kodzie.
spróbuj
NSRange range = [urlString rangeOfString:@"http://"];
if (range.location != NSNotFound)
// Add http://
NSString * urlString = ...;
NSURL * url = [NSURL URLWithString:urlString];
if (![[url scheme] length])
{
url = [NSURL URLWithString:[@"http://" stringByAppendingString:urlString]];
}
To może być rozwiązanie, ale ta metoda dodaje adres http: // do adresu URL ... i jeśli adres URL zawiera http: // co robi ta metoda? – matteodv
Ten kod dodaje "http: //" do wszystkich adresów URL bez schematu."http: // blah" ma schemat "http", więc '[[schemat adresu URL] length]' jest niezerowy, a kod pozostawia adres URL bez zmian. –
Jeśli sprawdzanie „http: //”, prawdopodobnie będziesz chciał bez uwzględniania wielkości liter wyszukiwania:
// probably better to check for just http instead of http://
NSRange prefixRange =
[temp rangeOfString:@"http"
options:(NSAnchoredSearch | NSCaseInsensitiveSearch)];
if (prefixRange.location == NSNotFound)
Chociaż myślę, że check schemat URL jest lepsza odpowiedź w zależności od Państwa okoliczności, ponieważ adresy URL mogą zaczynać się od http lub https i innych prefiksów w zależności od tego, jaki jest Twój przypadek użycia.
Najpierw należy utworzyć nową kategorię dla NSURL: Plik> Nowy plik> Kategoria celu C. Możesz nazwać kategorię czymś na wzór HTTPURLWithString, ustawić ją jako kategorię NSURL, nacisnąć next i dodać do swojego celu. Następnie w bibliotece NSURL + HTTPURLFromString.m wdrożyć następujący komunikat (i zadeklarować wiadomość w .h)
@implementation NSURL (HTTPURLFromString)
+(NSURL *)HTTPURLFromString:(NSString *)string
{
NSString *searchString = @"http";
NSRange prefixRange = [string rangeOfString:searchString options:(NSCaseInsensitiveSearch | NSAnchoredSearch)];
if (prefixRange.length == 4) {
return [NSURL URLWithString:string];
}
return [NSURL URLWithString:[NSString stringWithFormat:@"http://%@", string]];
}
@end
Aby otworzyć link w WebView jest po prostu
NSString *urlString = @"www.google.com";
NSURL *url = [NSURL HTTPURLFromString:urlString];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[webView.mainFrame loadRequest:request];
pisałem o przedłużenie String w Swift, aby sprawdzić, czy adres URL ciąg dostał http lub https
extension String{
func isValidForUrl()->Bool{
if(self.hasPrefix("http") || self.hasPrefix("https")){
return true
}
return false
}
}
if(urlString.isValidForUrl())
{
//Do the thing here.
}
Lepiej użyć właściwości scheme
na obiekcie URL
:
extension URL {
var isHTTPScheme: Bool {
return scheme?.contains("http") == true
}
}
Przykład użycia:
let myURL = https://stackoverflow.com/a/48835119/1032372
if myURL.isHTTPScheme {
// handle, e.g. open in-app browser:
present(SFSafariViewController(url: url), animated: true)
} else if UIApplication.shared.canOpenURL(myURL) {
UIApplication.shared.openURL(myURL)
}
- 1. Sprawdź, czy adres URL jest prawidłowy, czy nie.
- 2. Sprawdzanie, czy adres URL ma http: // na początku i wstawianie, jeśli nie,
- 3. Sprawdź ciąg zawierający URL dla "http: //"
- 4. Sprawdź, czy adres URL prowadzi do pliku lub strony.
- 5. SOAP, żądania usługi http i adres URL
- 6. jQuery Uzyskaj żądanie na adres URL HTTP
- 7. Laravel 5 Sprawdź, czy aktualny adres URL odpowiada akcji
- 8. Czy można przekształcić/znormalizować adres URL?
- 9. Sprawdź, czy klasa ma atrybut?
- 10. Sprawdź, czy Html.ValidationSummary() ma wartość
- 11. Sprawdź, czy formularz ma klucz?
- 12. Sprawdź, czy kursor ma wyniki
- 13. Adres URL typu wejściowego - mówi "Wprowadź adres URL", jeśli HTTP nie jest dołączony.
- 14. Sprawdź, czy ciąg znaków jest adresem URL
- 15. Usuwanie plików, który ma ten sam przedrostek
- 16. Czy przedrostek @ dla delegatów ma jakieś specjalne znaczenie?
- 17. Czy adres URL żądania HTTP nie jest częścią nagłówka żądania HTTP?
- 18. Sprawdzanie, czy adres URL istnieje, czy nie
- 19. Dowiedz się, czy adres URL jest uszkodzony?
- 20. Sprawdź, czy ciąg zawiera adres e-mail?
- 21. Nieobsługiwany adres URL iOS
- 22. prefiks $ http url
- 23. Używam kątowej, a mój adres url zawsze ma "!" (Wykrzyknik)
- 24. adres URL php wybucha
- 25. Jak zmienić podstawowy adres URL wywołania HTTP AngularJS? wzywa
- 26. Adres URL uwierzytelniania podstawowego HTTP z "@" w haśle
- 27. Spring MVC zwraca HTTP 406 na adres URL z kropką
- 28. TFS Aktualny adres URL sprintu
- 29. Sprawdź, czy zmienna zaczyna się od "http"
- 30. Sprawdź, czy obraz istnieje php
Test przerwy z "HTTP://www.google.com". Nie obsługuje także ftp: //, nawet jeśli działa UIWebView. –
Myślę, że moja odpowiedź daje wystarczające informacje, że Matthew może rozwiązać swój problem. – Greg
Tak, Greg, właśnie tego szukam ... Będę obsługiwał tylko protokół http, ponieważ jest to jedyny, który może służyć w mojej aplikacji ...;) – matteodv