是否可以判断正在加载的网页是远程还是本地?
Posted
技术标签:
【中文标题】是否可以判断正在加载的网页是远程还是本地?【英文标题】:Is it possible to tell if a web page being loaded is remote versus local? 【发布时间】:2012-10-02 20:48:52 【问题描述】:在UIWebView:shouldStartLoadWithRequest:
内,我想知道正在加载的页面是本地文件还是远程文件。有没有一种简单的方法可以找出来?
我想每次加载文件时我都可以搜索文件系统来查找文件,但是还有其他方法吗?
【问题讨论】:
【参考方案1】:您应该能够通过 URL 的类型来判断请求的类型。
应该像file:…
与http:…
或https:…
一样简单。
【讨论】:
您希望支持哪些方案? Apple 声称支持 ftp、http、https 和文件。 仅检查 http 和 https 是不完整的,因为还有许多其他方案。检查文件:除非首先加载一个本身可能包含文件的http文件:链接到其文件系统上的本地文件,否则检查文件:将是可以的,如果是这样,那么检查文件:因此在这种情况下将不起作用,因为它会错误地报告远程文件是本地的。 - html 文件可以包含“file://...”链接吗? 一个 UIWebView 应该能够支持任何方案,我已经看到它加载了除了列出的少数方案之外的其他方案,我需要支持所有的方案。 关于您评论的第二部分:子请求是一个完全不同的问题。 我认为你想要的是不可能的。我可以创建一个 URL,该 URL 对本地和远程数据的指令进行编码。【参考方案2】:是的,这是可能的。您应该使用正则表达式来测试主机名。本地页面与正则表达式不匹配。
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
static NSString *regexp = @"^(([a-zA-Z]|[a-zA-Z][a-zA-Z0-9-]*[a-zA-Z0-9])[.])+([A-Za-z]|[A-Za-z][A-Za-z0-9-]*[A-Za-z0-9])$";
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"SELF MATCHES %@", regexp];
if ([predicate evaluateWithObject:request.URL.host])
[[UIApplication sharedApplication] openURL:request.URL];
return NO;
else
return YES;
【讨论】:
注:正则表达式来源于***.com/questions/106179/…以上是关于是否可以判断正在加载的网页是远程还是本地?的主要内容,如果未能解决你的问题,请参考以下文章
现在很流行的网页下拉加载动画效果,是用啥技术实现的呢?只用了js和css3吗?请知道的人详细回答