iPhone — Как я могу узнать, является ли URL-адрес файлом ресурсов?

#iphone #url #resources #uiwebview #request

#iPhone #url #Ресурсы #uiwebview #запрос

Вопрос:

Я перехватываю URL-адрес в shouldStartLoadWithRequest.

Как я могу узнать, пытается ли быть открыт один из ресурсов моего проекта (например, с помощью [self.webView loadHTMLString:htmlContentFinal baseURL:[NSURL fileURLWithPath:bundlePath]]; ) или что-то еще?

Ответ №1:

Вы можете проверить, начинается ли строка URL с file:// :

 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    if (request.URL.isFileURL) {
        // do some stuff
    }
}
  

Как я могу убедиться, что я тот, кто загрузил этот файл? Пользователь мог бы сам ввести этот URL-адрес в поле url.

Вы можете реализовать -textFieldDidBeginEditing или -textFieldDidEndEditing и задать некоторым логическим свойствам значение YES :

 - (void)textFieldDidEndEditing:(UITextField *)textField {
    if ([[textField.text substringToIndex:7] isEqualToString:@"file://"]) {
        self.fileUrlEnteredManually = YES;
    } else {
        self.fileUrlEnteredManually = NO;
    }
}

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
    if (request.URL.isFileURL) {
        if (self.fileUrlEnteredManually) {
            // user entered "file://" manually
        } else {
            // user didn't
        }
    }
}

- (void)viewDidload {

    // ...

    fileUrlEnteredManually = NO;
    [webView loadRequest:yourLocalRequest];

}
  

Комментарии:

1. Как я могу убедиться, что я тот, кто загрузил этот файл? Пользователь мог бы сам ввести этот URL-адрес в поле url.

2. Использует ли пользователь UITextField для ввода URL-адреса?

Ответ №2:

Проверьте [URL schema] . Если это так file , то это локальный файл. Это не обязательно будет ресурс пакета — это может быть, например, файл в документах вашего приложения.

Чтобы убедиться, что он находится в пакете, сопоставьте начало пути с путем пакета, доступным из [NSBundle mainBundle]. Хотя я не понимаю, почему.

Комментарии:

1. Как я могу убедиться, что я тот, кто загрузил этот файл? Пользователь мог бы сам ввести этот URL-адрес в поле url.

2. @Oliver: Зачем вам поле URL, если вы не хотите, чтобы пользователи загружали произвольные URL-адреса? Содержимое вашей папки ресурсов известно вам во время разработки; если это единственное содержимое, которое вы хотите сделать доступным, вместо поля URL произвольной формы предоставьте список ( UITableView или что-то еще) допустимых ресурсов.

3. Я хочу сделать доступным URL-адрес произвольной формы, но я хочу убедиться, что пользователь не попытается ввести URL-адрес файлов с iPhone.

4. @Oliver: Проверяйте введенные пользователем URL-адреса, прежде чем они попадут в WebView.