2013-10-22 34 views
0

我正在構建一個ePub閱讀器,並且我正在加載UIWebView上每章的html文件。當用戶到達章節的末尾時,我將在下一章的相同webView上加載。由於我需要執行一些jQuery函數來創建高亮,筆記和許多額外的內容,因此我還將jQuery庫注入查看器。這是我使用的代碼:UIWebView與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功能與新的URL再次呼籲,但這次$(document).ready不叫,所以當我嘗試打電話給我的任何功能,我得到以下錯誤:ReferenceError: Can't find variable: $

爲什麼不我第一次調用後加載jQuery庫?

回答

0

我今天遇到了這個,蘋果的文檔沒有用。 在我的情況下,我從本地HTML,JS和CSS文件加載 - 而不是從遠程Web地址加載。所以,這可能不適合你,但它適用於本地文件。

以下是解決方法。代碼在Swift中。

方法

  1. 在你UIWebViewDelegate,創建時加載的數據將增加一個int變量。
  2. 每次加載數據(或發佈請求)時,將其遞增1
  3. 在shouldStartLoadWithRequest中,檢查導航類型是否爲「其他」:如果它是且計數器變量大於1,返回false(Objective-C中的NO)。

這工作,因爲該視圖是呈現每次實例化,因此計數器復位爲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 
    } 
}