質問: CakePHPでJavaScriptファイルを使用します。 その際に、webroot/js/に保存しました。 そのJavaScriptファイルの中で、画像ファイルを使用するために、画像ファイルのパスを指定する状況が有ります。 しかし、../img/○○.jpgと指定しても、駄目なようです。 どのようにして指定すれば良いのでしょうか? 例えば、Viewで使用するctpファイルであったら、$this->Html->image()を使用して指定することが出来ると思います。 しかし、JavaScriptファイル内ではどのように指定すればいいのか分かりません。 よろしくお願いします。
回答: webroot/js/下に置くJavaScriptファイル内でなんらかのパスを記述した場合、 それは**そのファイルを読み込んだHTMLファイルのアクセスされたURLから見た**パスとなります。 * 例1 jsファイル内で`"img/a.png"` `http://foo.example.com/user/` でアクセスされると`http://foo.example.com/user/img/a.png`, `http://foo.example.com/user/index/` でアクセスされると`http://foo.example.com/user/index/img/a.png` * 例2 jsファイル内で`"/img/a.png"` `http://foo.example.com/user/` でも`http://foo.example.com/user/index/`でもどちらでアクセスされても`http://foo.example.com/img/a.png` ただし、Alias等の機能で**特定のサブディレクトリ下にアプリを配置している場合**(`http://foo.example.com/appbase/user/`のように)でも`http://foo.example.com/img/a.png`となってしまいます。 おそらく質問者様はサブディレクトリ下で運用されているのではないでしょうか。 その場合は正規表現などを使って`/appbase/img/a.png`のようにベースとなるディレクトリを補完するか、Viewテンプレート内のスクリプトから処理を呼び出す際に`$this->request->base`を渡してあげる必要があります。