javascriptについて


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

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

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

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

回答の条件
  • 1人2回まで
  • 登録:2009/11/12 13:36:01
  • 終了:2009/11/19 13:40:02

回答(3件)

id:Numeric No.1

Numeric回答回数83ベストアンサー獲得回数182009/11/12 17:09:43

ポイント40pt

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("/")) : ".";
}
id:worldtravel

ありがとうございます。

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

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

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

2009/11/12 18:14:35
id:kn1967 No.2

kn1967回答回数2915ベストアンサー獲得回数3012009/11/12 14:07:21

./hoge/foo.html

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

これを取り去って、

/hoge/foo.html

とすれば、

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

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

id:worldtravel

ありがとうございます。

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

2009/11/17 18:22:33
id:i4ooon No.3

regnif回答回数56ベストアンサー獲得回数202009/11/13 15:29:18

ポイント40pt

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

id:worldtravel

ありがとうございます。

2009/11/17 05:09:52
  • id:kn1967
    ごめんなさい。
    回答1は「/から」を見逃してました。
    開かないでください。
  • id:worldtravel
    ありがとうございます。
    括弧か何かで括れば良かったですね。
    すみません。
  • id:kn1967
    もしよかったら教えていただきたいのですが、
    不適切な回答にチェックを入れずにゼロポイントにすることは出来ましたか?

    不適切な回答にチェックを入れられてしまうと、
    確実と思われる回答があっても貴殿には回答できなくなりますし、
    他の人への回答権まで失う可能性があるので、教えていただきたいのです。

この質問への反応(ブックマークコメント)

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません