0

私は ePub リーダーを構築しており、UIWebView のすべての章の html ファイルを読み込んでいます。ユーザーが章の終わりに到達すると、同じ 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と、新しい URL で関数が再度呼び出されますが、今回$(document).readyは呼び出されないため、関数を呼び出そうとすると、次のエラーが発生します。ReferenceError: Can't find variable: $

最初の呼び出し後に jQuery ライブラリをロードしないのはなぜですか?

4

1 に答える 1

0

今日これに遭遇しましたが、Apple のドキュメントは役に立ちませんでした。私の場合、リモート Web アドレスからではなく、ローカルの HTML、JS、および CSS ファイルからロードしていました。したがって、これでうまくいかないかもしれませんが、ローカル ファイルではうまくいきます。

以下は回避策です。コードは 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
  }
}
于 2014-07-15T21:29:20.823 に答える