人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

javascriptについて

hoge.js に window.open("./hoge/foo.html"); と書いて
a.html から呼び出すと、 a.html から見たパスになります。

そうではなく、hoge.js から見たパスにできないでしょうか。

階層の違う複数のhtmlから呼び出しても同じ foo.html を開きたいのです。
phpでいう dirname(__FILE__) に近い感じでしょうか。

ただし、汎用的な物を作り、いろいろなサーバの階層の違うところに設置したいので
パスはhtmlからや/からでは無い方法でお願いします。

●質問者: worldtravel
●カテゴリ:ウェブ制作
✍キーワード:hoge HTML JavaScript js open
○ 状態 :終了
└ 回答数 : 3/3件

▽最新の回答へ

1 ● Numeric
●40ポイント

scriptタグにID(例:hoge)をつけるのが可能であれば、こんな感じでいかがでしょうか。

とりあえずIE7とFireFoxでは動くような気がします。

var JS_DIR = "."; // jsファイルのあるディレクトリ。
if(document.getElementById("hoge")){
JS_DIR = dirname(document.getElementById("hoge").getAttribute("src"));
}

window.open(JS_DIR."/../hoge/foo.html");

// string dirname(string path)
// ディレクトリの名前を返します。
// path にスラッシュが無い場合は、 カレントディレクトリを示すドット ('.') を返します。
// それ以外の場合は、スラッシュ以降の /component 部分を取り除いた path を返します。
function dirname(path){
return (0 <= path.indexOf("/"))?path.substring(0, path.lastIndexOf("/")) : ".";
}
◎質問者からの返答

ありがとうございます。

やはり dirname(__FILE__) のような20文字程度で何かは無いのですね。

時間ができ次第試させていただきます。

結果は後ほどご報告させていただきます。


2 ● kn1967
●0ポイント

./hoge/foo.html

最初のピリオドは、現在と同じディレクトリ(フォルダ)という意味になってますので、

これを取り去って、

/hoge/foo.html

とすれば、

http//ほにゃらら/hoge/foo.html

を常に差すようになります。

◎質問者からの返答

ありがとうございます。

間違えてあけてしまいました。


3 ● regnif
●40ポイント

jQueryを使って良い&Numericさん同様にscriptタグにID指定(="hoge")できるなら、

$("#hoge").attr("src").substr(0,$("#hoge").lastIndexOf("/"));

です。

PHPは環境変数(?)で__FILE__が用意されているのに対してJavaScriptは類似のものが無い(と思う)ので、該当JS呼び出し側でID指定は必要になってしまいますし、dirname関数を自前で作らないとしても文字列処理も必要になってしまうというのが、限界ではないかと思います。IDを"hoge"ではなく"h"としても50文字(バイト)は越えますね(^^;

動作デモ

http://regnif.web.fc2.com/test/current_js_path/test.html

http://regnif.web.fc2.com/test/current_js_path/test01.html

◎質問者からの返答

ありがとうございます。

関連質問


●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ