#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.