Я создаю ePub-ридер, и я загружаю html файлы каждой главы в UIWebView. Когда пользователь достигает конца главы, я загружаю тот же webView в следующую главу. Поскольку мне нужно выполнить некоторые функции jQuery, чтобы создавать блики, заметки и много дополнительного контента, я также вставляю библиотеку jQuery в программу просмотра. Это код, который я использую:
- (void)loadBook{
...
[self.bookWebView loadRequest:[NSURLRequest requestWithURL:chapterURL]];
NSString *jQuery = [NSString stringWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"jquery" ofType:@"js"] encoding:NSUTF8StringEncoding error:nil];
[self.bookWebView stringByEvaluatingJavaScriptFromString:jQuery];
}
Когда он загружает первую главу, когда webViewDidFinishLoad:
вызывается функция $(document).ready
и весь мой код jQuery работает отлично. Когда я loadBook
к следующей главе, функция loadBook
вызывается снова с новым URL-адресом, но на этот раз $(document).ready
не вызывается, поэтому, когда я пытаюсь вызвать любую из моих функций, я получаю следующую ошибку: ReferenceError: Can't find variable: $
Почему он не загружает библиотеку jQuery после моего первого вызова?
Я столкнулся с этим сегодня, и документация Apple не имела смысла. В моем случае я загружался из локальных файлов HTML, JS и CSS - НЕ с удаленного веб-адреса. Таким образом, это может не сделать этого для вас, но оно работает для локальных файлов.
Ниже приведено обходное решение. Код находится в Swift.
Метод:
Это работает, потому что представление создается при каждом его представлении, поэтому счетчик сбрасывается на 0.
Код:
class MyView: ..., UIWebViewDelegate {
var theCounter = 0
...
func myFunctionWhereILoadTheData() {
... load the data (the code in your question)
theCounter += 1
}
...
func webView(webView: UIWebView!, shouldStartLoadWithRequest
request: NSURLRequest!, navigationType: UIWebViewNavigationType) -> Bool {
switch navigationType {
...
.Other:
if theCounter > 1: return false
}
}