2009-07-12 6 views
1

私は非常にシンプルなMac Cocoaアプリケーションを持っています。ちょうどCSSとJavaScriptでHTMLファイルを読み込むWebビューを持っています。私はこの方法にアプリのデリゲートをフックアップしている:WebViewでjavascriptを有効にするには

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification { 
    NSString* filePath = [[NSBundle mainBundle] pathForResource: @"index" ofType: @"html"]; 
    NSURL *url = [NSURL URLWithString: filePath]; 
    [[self.webView mainFrame] loadHTMLString: [NSString stringWithContentsOfFile: filePath] baseURL: url]; 
} 

index.htmlファイルには以下が含まれています。

<html> 
    <head> 
    <title>Hello, World!</title> 
    <link href="style.css" rel="stylesheet" type="text/css" /> 
    <script type="text/javascript" src="jquery.js"></script> 
    <script type="text/javascript"> 
     jQuery(function($){ 
     $('h1').fadeOut() 
     }) 
    </script> 
    </head> 
    <body> 
    <h1>Hello, World!</h1> 
    </body> 
</html> 

のstyle.cssファイルが正しくロードされ、私は灰色に背景を設定しているためそのため、リソースバンドルから他のアセットを読み込むことができます。 javascriptコードは実行されません。 Safariでindex.htmlを開くと、Hello World h1が期待どおりに消えます。なぜ私のWebViewのアプリでこれは起こりませんか? JavaScriptを有効にするために何かする必要がありますか? JavaScriptの横のボックスはInterface Builderでチェックされています。

このためのコードは、JavaScriptを有効にするには、何もする必要はありませんhttp://github.com/pjb3/WebViewApp

答えて

4

で入手可能です。これはデフォルトでWebViewで有効になっています。あなたが言ったように、Interface BuilderでJavaScriptのチェックボックスが選択されていることをいつでも確認できます。

あなたは何をすべきか、しかし、(htmlファイルにあなただけのファイル名を使用して、相対URLでjquery.jsに言及しているので)、あなたことをあなたが指定しているbaseURL正しいことを確認していますjquery.jsファイルをバンドルリソースに含めました。

あなたはurl変数のnil値になります投稿コード:+URLWithString:は(あなたが提供しているファイルシステムのパスではありません)引数として有効なURL文字列を(つまり、RFC 2396に準拠)期待しています。あなたが望むのは+fileURLWithPath:で、index.htmljquery.jsが存在するディレクトリのファイルシステムパスを使用する必要があります。これはあなたが入手したパス(NSString-stringByDeletingLastPathComponent:を使って)からファイル名を削除することで得ることができます。ここでは、あなたが正しいbaseURLを取得する方法は次のとおりです。

NSURL *url = [NSURL fileURLWithPath:[filePath stringByDeletingLastPathComponent]]; 
+0

私はこれらの更新を行いましたが、これは意味がありますが、まだ動作していないようです。あなたはhttp://github.com/pjb3/WebViewAppのコードを見ることができます – pjb3

+0

ああ、私はそれを理解しました。あなたが「jquery.jsファイルをバンドルリソースに組み込んだ」という意味は分かりませんでした。私は、リソースフォルダにあった.jsファイルをターゲットのWebViewAppの下にある "バンドルリソースのコピー" um ... thing :)にドラッグしました。すべては今はよく、ありがとう! – pjb3

+0

これはLauraです。私は同じ問題に固執していますが、urソリューションに続いて問題は解決されません。 IBでjavascriptが有効になっていることを確認する方法を教えてください。私はfinf任意のjavascriptのチェックボックスをdin't。 – Aisha

0

また何hasseg言ったために:なぜ代わりにファイルをロードするためにこれを使用しませんか?

NSURL *url = [NSURL fileURLWithPath:filePath]; 
[self.webView setMainFrameURL:url]; 
2

まだこれに苦しんで人のためだけで簡単に更新...私は<ヘッド> < /ヘッド>セクションにロードされprototype.jsのライブラリとHTMLページを持っていた正確に同じ問題を抱えていましたページのしかし、CocoaアプリでWebView内で同じページを開いたときにライブラリが読み込まれていませんでした。実際には、(私自身であっても)読み込まれているスクリプトファイルはWebViewでは動作していないようです。

私は上記のgithubコードを、提供されたリンクpjb3からダウンロードしました。おそらく彼は修正を見つけて更新したと考えていました。そのような運はありません。それでも同じ問題がありました。

そして、私はコンパイルされたアプリケーションのパッケージ内容を調べることにしました(つまり、XCodeがあなたのアプリケーションをコンパイルしたbuild/Debugまたはbuild/ReleaseディレクトリのWebViewApp/Contents/Resourcesになります)... ああ!彼がXCodeプロジェクトのResourcesセクションに入れたjavascriptファイルは、実際にビルドされたアプリケーションのResourcesディレクトリにコピーされていませんでした。私のプロジェクトを見ても同じ問題でした。 修正?追加したスクリプトのいずれかを、アプリターゲットの「バンドルリソースをコピーする」セクションにドラッグするだけで、XCodeとVoilaにも表示されます(実際には機能します)。

私はあなたがリソースに入れたものはすべて自動でコピーされていると思っていましたが、そうではないと思います。残念なことに、WebViewの場合、少し作業をしなければ、FirefoxやSafariでこのような問題を見つけやすくしてくれる、すばらしいWebデバッグ用のものはありません。それで、疑問があるときは、あなたの実際のコンパイルされたアプリケーションがResourcesディレクトリの下で必要なリソースを持っているかどうかを確認してください(これはおそらくプログラマのバージョンが「プラグインされていますか?これは私に多くの頭を引っかきさせ、失われた時間のための私の唯一の慰めは、私が多分同じ人からいくつかの人々を救うことができるということです。ハッピーコーディング!

+0

「リソース」などのグループツリーのグループは、組織的なツールに過ぎません。 Classesグループ内のリソースとResourcesグループ内のソースファイルを配置することができ、ビルド時に何が起こるかに違いはありません。ビルド段階(たとえば、「バンドルリソースのコピー」)は、ビルド時に発生します。また、Xcodeではなく、小文字のcを持つXcodeです。 –

関連する問題