是否可以判断正在加载的网页是远程还是本地?

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/…

以上是关于是否可以判断正在加载的网页是远程还是本地?的主要内容,如果未能解决你的问题,请参考以下文章

如何通过 C# 判断一个 路径 是本机还是远程 ?

php判断远程文件是否存在

现在很流行的网页下拉加载动画效果,是用啥技术实现的呢?只用了js和css3吗?请知道的人详细回答

maven是怎么判断包在本地仓库和远程仓库哪个是新的

nw.js打包了远程的html网页但是网页修改后程序打开网页不变化

sqlplus / as sysdba如何判断登录了本地还是远程的数据库?