Ошибка на UIWebView с jQuery

0

Я создаю 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 после моего первого вызова?

Теги:
uiwebview

1 ответ

0

Я столкнулся с этим сегодня, и документация Apple не имела смысла. В моем случае я загружался из локальных файлов HTML, JS и CSS - НЕ с удаленного веб-адреса. Таким образом, это может не сделать этого для вас, но оно работает для локальных файлов.

Ниже приведено обходное решение. Код находится в Swift.

Метод:

  1. В UIWebViewDelegate создайте переменную Int, которая будет увеличена при загрузке ваших данных.
  2. Увеличивайте его на 1 каждый раз, когда вы загружаете свои данные (или отправляете запрос)
  3. В файле shouldStartLoadWithRequest проверьте, является ли тип навигации "другим" или нет: если он и переменная счетчика больше 1, верните значение false (НЕТ в Objective-C).

Это работает, потому что представление создается при каждом его представлении, поэтому счетчик сбрасывается на 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
  }
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню