Я пошел использовать UIWebView для отображения динамического контента, вместо того, чтобы делать это изначально с использованием пользовательских интерфейсов. Можно ли запускать собственные функции приложения из простого попадания ссылок внутри UIWebView? Пример: нажатие ссылки, которая затем переключает текущий вид?Может ли интерфейс UIWebView взаимодействовать с приложением?
ответ
Да, это возможно. В вашем HTML, вы пишете JS, чтобы загрузить URL с поддельной схемы, такие как
window.location = "request_for_action://anything/that/is/a/valid/url/can/go/here";
Затем в коде IOS, назначить делегата вашего WebView, а в делегата, ручка
webView:shouldLoadWithRequest:navigationType
с чем-то вроде
if([request.URL.scheme isEqualToString: @"request_for_action"])
{
// parse your custom URL to extract parameter, use URL parts or query string as you like
return NO; // return NO, so webView won't actually try to load this fake request
}
-
просто в сторону, вы можете сделать по-другому, пусть IOS сотрудничества де вызвать некоторые коды JS в вашем HTML по использованием
NSString* returnValue = [self.webView stringByEvaluatingJavaScriptFromString: "someJSFunction()"];
Да! Когда пользователь нажимает ссылку, вы слышите об этом в делегате веб-представления и можете делать все, что захотите. Мощный материал можно сделать таким образом.
Делегат веб-представления отправлен webView:shouldStartLoadWithRequest:navigationType:
. Вы анализируете, что произошло, и отвечаете, как хотите. Чтобы предотвратить просмотр веб-представления по ссылке (которая в конечном итоге может быть полностью фальшивой), просто верните NO.
В этом примере из приложения TidBITS News у меня есть ссылка на веб-странице, в которой используется полностью созданная схема play:
. Я обнаруживаю, что в делегатом и играть:
- (BOOL)webView:(UIWebView *)webView
shouldStartLoadWithRequest:(NSURLRequest *)r
navigationType:(UIWebViewNavigationType)nt {
if ([r.URL.scheme isEqualToString: @"play"]) {
[self doPlay:nil];
return NO;
}
if (nt == UIWebViewNavigationTypeLinkClicked) {
[[UIApplication sharedApplication] openURL:r.URL];
return NO;
}
return YES;
}
Реализовать UIWebViewDelegate
метод webView:shouldStartLoadWithRequest:navigationType:
.
Обращайтесь с навигацией по типу и запросу при необходимости.
Я установил делегат и реализовал методы делегирования uiwebview. Но ни один из моих методов-делегатов не вызывается, когда я нажимаю на некоторое содержимое uiwebview. Обратного вызова нет. То, что должно быть сделано? – iPhoneDeveloper
@iPhoneDeveloper Вы должны оставить свой собственный вопрос со всеми необходимыми деталями. – rmaddy
- 1. Может ли приложение Android взаимодействовать с другим приложением?
- 2. Может ли интерфейс UIWebView взаимодействовать с пользователем, не становясь первым ответчиком?
- 3. Возможно ли взаимодействовать с UIWebView без касания?
- 4. Может ли Silverlight взаимодействовать с MIDI-инструментом?
- 5. Взаимодействовать с моим запущенным приложением
- 6. Может ли моя программа взаимодействовать с GDB?
- 7. Как должен взаимодействовать контроллер просмотра с UIWebView
- 8. Интерфейс UIWebView скрыть uitoolbar
- 9. Xcode 7.2 не может взаимодействовать с приложением хелперов
- 10. Как приложение java может взаимодействовать с приложением Android?
- 11. Может ли RavenDB взаимодействовать вне .Net?
- 12. Как взаимодействовать между консольным приложением Win32 и приложением MFC?
- 13. Получить данные и взаимодействовать с запущенным приложением
- 14. Взаимодействовать с приложением Windows через java-код?
- 15. Может ли JavaScript взаимодействовать с CSS?
- 16. Может ли VBA взаимодействовать с флеш-сайтом?
- 17. Может ли monkeyrunner взаимодействовать с андроидными уведомлениями?
- 18. Может ли Azure взаимодействовать с Amazon?
- 19. Как я могу взаимодействовать с приложением Windows из приложения AIR?
- 20. Может ли веб-сайт взаимодействовать с приложением Click Once? (запустите его или передайте ему параметры?
- 21. Может ли приложение Windows 8 Store взаимодействовать с настольным приложением Windows 7 через сокеты UDP/TCP?
- 22. Может ли веб-приложение asp.net взаимодействовать с автономным визуальным приложением C++?
- 23. Может ли UIWebView заменить сафари?
- 24. UIWebView Javascript интерфейс
- 25. Может ли трекер GPRS напрямую взаимодействовать с смартфоном?
- 26. Может ли JavaScript взаимодействовать на другом сервере?
- 27. Может ли Swing + Servlets быть веб-приложением?
- 28. Может ли Siri использоваться с приложением Cordova?
- 29. Может ли кодированный пользовательский интерфейс и тестовый контроллер взаимодействовать с ech другим, находящимся в разных сетях.
- 30. Как гаджет боковой панели Windows может взаимодействовать с моим настольным приложением?
Это выглядит именно то, что мне нужно сделать. Но я не могу понять, где я могу поместить этот метод? Спасибо за описательный ответ, кстати! –
Вы помещаете его туда, где есть делегат UIWebView! – matt
Alwesome, это работает! :) Еще один вопрос: почему, когда я нажимаю ссылку с предопределенной схемой url, приложение перенаправляется в Safari и пытается открыть его? –