Ios 检查URL是否具有http://前缀
Ios 检查URL是否具有http://前缀,ios,http,url,uiwebview,hyperlink,Ios,Http,Url,Uiwebview,Hyperlink,在我的应用程序中,当用户添加一个对象时,还可以为该对象添加一个链接,然后可以在webView中打开该链接。 我试图保存一个没有http://prefix的链接,然后在webView中打开它,但无法打开它 在webView开始加载之前,是否有方法检查保存的URL是否具有http://前缀?如果没有,我如何将前缀添加到URL? 谢谢 我不确定是否有任何方法可以检查,但您可以在代码中检查它 试用 NSRange range = [urlString rangeOfString:@"http://"];
在我的应用程序中,当用户添加一个对象时,还可以为该对象添加一个链接,然后可以在webView中打开该链接。
我试图保存一个没有http://prefix的链接,然后在webView中打开它,但无法打开它
在webView开始加载之前,是否有方法检查保存的URL是否具有http://前缀?如果没有,我如何将前缀添加到URL?
谢谢 我不确定是否有任何方法可以检查,但您可以在代码中检查它 试用
NSRange range = [urlString rangeOfString:@"http://"];
if (range.location != NSNotFound)
// Add http://
您可以在NSString上使用-(BOOL)hasPrefix:(NSString*)aString
方法查看包含URL的NSString是否以http://前缀开头,如果不是,则添加前缀
NSString *myURLString = @"www.google.com";
NSURL *myURL;
if ([myURLString.lowercaseString hasPrefix:@"http://"]) {
myURL = [NSURL URLWithString:myURLString];
} else {
myURL = [NSURL URLWithString:[NSString stringWithFormat:@"http://%@",myURLString]];
}
我目前不在mac电脑上,无法编译/测试此代码,但我相信上面的方法应该可以工作。如果您正在检查“http://”,您可能需要不区分大小写的搜索:
NSString * urlString = ...;
NSURL * url = [NSURL URLWithString:urlString];
if (![[url scheme] length])
{
url = [NSURL URLWithString:[@"http://" stringByAppendingString:urlString]];
}
// probably better to check for just http instead of http://
NSRange prefixRange =
[temp rangeOfString:@"http"
options:(NSAnchoredSearch | NSCaseInsensitiveSearch)];
if (prefixRange.location == NSNotFound)
尽管我认为url方案检查是一个更好的答案,这取决于您的具体情况,因为url可以以http或https开头,也可以根据您的用例使用其他前缀。首先,您应该为NSURL创建一个新类别:File>new File>Objective-C category。您可以按照HTTPURLWithString的方式调用该类别,将其设置为NSURL类别,然后按next并将其添加到目标中。然后在NSURL+HTTPURLFromString.m中实现以下消息(并在.h中声明该消息) 在WebView中打开链接非常简单
NSString *urlString = @"www.google.com";
NSURL *url = [NSURL HTTPURLFromString:urlString];
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[webView.mainFrame loadRequest:request];
我在Swift中为字符串编写了一个扩展,以查看url字符串是否得到http或https
extension String{
func isValidForUrl()->Bool{
if(self.hasPrefix("http") || self.hasPrefix("https")){
return true
}
return false
}
}
if(urlString.isValidForUrl())
{
//Do the thing here.
}
最好在
URL
对象上使用scheme
属性:
extension URL {
var isHTTPScheme: Bool {
return scheme?.lowercased().contains("http") == true // or hasPrefix
}
}
用法示例:
let myURL = URL(string: "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)
}
您可以使用scheme属性进行签出。例如
if ([yourURL.scheme isEqualToString:@"http"] || [yourURL.scheme isEqualToString:@"https"]) {
...
}
此测试以“”中断。它也不支持ftp://,即使UIWebView支持。我认为我的回答提供了足够的信息,Matthew可以解决他的问题。是的Greg,这就是我要找的。。。我将只支持http协议,因为它是唯一可以在我的应用程序中提供服务的协议…;)要检查不区分大小写的前缀,请使用以下方法:这可能是一个解决方案,但此方法会将http://添加到URL。。。如果URL有http://这个方法是什么?这段代码在没有方案的情况下向所有URL添加“http://”。“”的方案为“http”,因此
[[url scheme]length]
为非零,并且代码保持url不变。
if ([yourURL.scheme isEqualToString:@"http"] || [yourURL.scheme isEqualToString:@"https"]) {
...
}