【问题标题】:Is it possible to tell if a web page being loaded is remote versus local?是否可以判断正在加载的网页是远程还是本地?
【发布时间】:2012-10-02 20:48:52
【问题描述】:

UIWebView:shouldStartLoadWithRequest: 内,我想知道正在加载的页面是本地文件还是远程文件。有没有一种简单的方法可以找出来?

我想每次加载文件时我都可以搜索文件系统来查找文件,但是还有其他方法吗?

【问题讨论】:

    标签: objective-c ios cocoa-touch uiwebview


    【解决方案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; 
        }
    }
    

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多