В моем приложении для iPhone у меня есть UIWebView, где я загружаю локальный HTML. Все обрабатывает очень хорошо, но теперь я хочу быть в состоянии обработать локальные ссылки (к сноскам): когда я нажимаю на локальную ссылку, я хочу быть в состоянии перейти к сноске, отнесенной ею, затем быть в состоянии возвратиться.
<a href="#tofootnote">jump to footnote</a>
Я обработал это путем добавления моего кода к shouldStartLoadWithRequest и прерывания локальных щелчков ссылки; когда на локальную ссылку нажимают, я работаю свое волшебство (скройте некоторые ui элементы, добавьте кнопку "Назад" и т.д.); нажатие на кнопку "Назад" переходит меня назад к исходному местоположению в документе HTML.
Проблема состоит в том, что нажатие на ONCE AGAIN на ссылке больше не называет shouldStartLoadWithRequest. Т.е. следующий код:
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {
NSLog(@"foo bar");
return YES;
}
только дисплеи "панель нечто" ОДНАЖДЫ (на самом деле, дважды - в первый раз, когда я первоначально загружаю документ), но только ОДНАЖДЫ впоследствии, независимо от того, сколько раз я нажимаю на локальную ссылку
Так, если у любого нет лучшего объяснения, я предполагаю, что UIWebView кэширует документ или ссылку или что-то и больше не называет обработчик после начального вызова; Если это верно, как я могу разрешить этот внутренний кэш? (не перезагружая документ)
Единственное решение, которое я нашел для этой проблемы, - это заменить строкой все привязки из «# привязка» к чему-то, что считается URL-адресом, например «| привязка». Таким образом UIWebView будет думать, что это настоящая ссылка, и при нажатии будет пытаться выполнить запрос. Это решение, очевидно, будет работать только в том случае, если вы сами обрабатываете все щелчки и, следовательно, можете интерпретировать измененные привязки. Я могу понять причину поведения UIWebView, но это довольно неприятно. Делегату действительно нужны сообщения, соответствующие обработчикам onclick и т. Д.
Попробуйте «прикоснуться к якоре» (назначить его к себе). Моя гипотеза состоит в том, что приведет к обновлению DOM, сделав его снова проверять ссылку. Не проверил это, это просто идея!
Библиотека для комплексной обработки событий.
-121--3040031-GTK, первоначально в C.
Портирован на Java, Python, Ruby, C++ и большинство других общих языков, которые вы можете придумать.
-121--3040030-Это происходит и для меня, когда я использую onclick = "window.location.hash =...; return false; "вместо захвата щелчка.
Если я прокручиваю вокруг немного или нажимаю на другой якорь, я могу использовать ссылку снова.
NSURLRequest * request = [NSURLRequest requestWithURL: fileURL cachePolocy: NSURLRequestReloadIgnoringLocalCacheData timeoutInterval: 60.0];
[webView loadRequest: запрос];