• ベストアンサー

jsファイルの中でのパス

DreamweaverMX2004のビヘイビアでマウスオーバー処理を使いたいために画像先読み機能をつけると、ヘッダにスクリプトが、また、bodyタグが <body onLoad="MM_preloadImages('img/aaa.gif','img/bbb.gif')"> と、自動的に書き換えられます。 読み込む画像が多くなると、bodyタグの中身が長くなるし、多岐に渡るページで同じスクリプトを使用したいので <body onLoad="Gazou()"> のようにして、JSファイルにまとめたいと思います。 JSファイルは「JS」というフォルダに「script.js」という名称で保存するとして、script.jsの中で画像のパスの書き方で困っています。 script.jsを基準にしたパスで書くのか、呼び出されるhtmlファイルを基準にパスを書くのか、です。 どちらなのでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
回答No.5

>script.jsを基準にしたパスで書くのか、 >呼び出されるhtmlファイルを基準にパスを書くのか、です。 >どちらなのでしょうか? 呼び出されるhtmlファイルを基準にパスを書くのが正しいです。 というか、正しくは JavaScript自身が動く場所を基準にパスを書くという事で、 ほとんどの場合が HTML で読み込んだその場で動くからです。 稀に他の場所で動くように仕掛ける事がありますから、 知識としては動く場所が基準と知っておくべきで。 まぁ通常は HTML ファイルを基準と考えて問題ないですが。 で、ついでなのですが、 JavaScript という事はブラウザが読み込んでブラウザが解釈して動くので、 サーバにアップしなくてもパソコンに置いても動作します。 というか、サーバからパソコンなどに読み込まれて 少なくともメモリには展開されて動作しています。 (キャッシュに残る場合はそちらにも書き出されますが。) なので、出来る限りパソコンなどローカルな環境で動作確認はしましょう。 #1の補足にある様な光ケーブル云々を気にするのは サーバの問題だけにしましょう。 (権限問題や本当にサーバに対象がアップされているかとか、CGIの動作などなど・・・) それから、#4の方が提示されている >「/aaa/bbb/ccc.gif」 この方法はブラウザの解釈が異なるので避けるべきです。 フラウザによって、ルートから解釈したりカレントから解釈したりと(どちらでもないよくわからないブラウザもあり) (CGIなど環境が特定されている場合に用いるのは良いのですが・・・) 汎用性を考え容易な方法は、 絶対アドレスで指定する事でしょう。 そうでなければ、 ファルダの深さを表す共通変数を用意して どの深さから呼んでいるか明示するか、 自分のURLを解釈してフォルダの深度を求める処理を用意するかなど 手間を掛ける事です。

すると、全ての回答が全文表示されます。

その他の回答 (4)

  • taseki
  • ベストアンサー率66% (155/233)
回答No.4

jsファイルといってもHTMLの中に埋め込まれることには変わりありません。つまり「HTMLファイルから見たパス」になります。 「呼び出されるhtmlファイル」ではなく「呼び出すHTMLファイル」が基準ですね。 ちなみに、他ディレクトリにある画像などを参照するとき、外部スクリプトファイル内にて相対パスで書くと、それを他位置のHTMLに埋め込んだときに使えなくなることがあるので、ルートからのパス http://www.xxx.com/aaa/bbb/ccc.gif なら「/aaa/bbb/ccc.gif」と書いておくことで、すべてのファイルから使えるようになります。あるいはjamslotさんのおっしゃるように絶対パスが無難かもしれません。 余計なことかもしれませんが、ttyp03さんのおっしゃるように、まずは自分で試すなり、質問の前に少しの努力はするようにしましょう。

すると、全ての回答が全文表示されます。
  • jamslot
  • ベストアンサー率29% (14/48)
回答No.3

htmlファイルを基準でよかったと思いますよ。 私もindex.html内にjsフォルダ内のjsファイルを埋め込んでます。同じ状況ですよね? 私はそれで問題なく動いておりますので! それでも心配ならば、絶対パスで記述されてはどうでしょうか?これが多分一番確実ですよね~。 ご参考になれば幸いです!

すると、全ての回答が全文表示されます。
  • ttyp03
  • ベストアンサー率28% (277/960)
回答No.2

光ケーブル云々ではなくて、画像が表示されればパスは正しい、表示されなければパスは正しくない。 これだけだと思いますが。

すると、全ての回答が全文表示されます。
  • ttyp03
  • ベストアンサー率28% (277/960)
回答No.1

両方試してみて使えるほうにしたらどうですか? こういうのは質問するよりも実際にやってみたほうが早いですよ。

partita
質問者

補足

光ケーブルなので、画像が先読みされているかどうかわかりにくいんです。 (ーー;)

すると、全ての回答が全文表示されます。

関連するQ&A