スラッシュを甘く見過ぎてた

この記事はだいぶ前に書かれたものなので情報が古いかもしれません

一ヶ月くらい前に音楽の間にある全曲再生の部分が直ったどー的なこと書いたんですけど、実は直ってませんでした。

いや、でも確かにちゃんと動いてたような気がしたんですけどねぇ……幻想だったのかな。あまりにも直らなかったから、思考が現実から逃避してしまったのかもしれん。まあ良い。

ローカルでは問題なく動くんです。でもサーバーだと動かない。先日の土曜に昼間から仕事は休みなのに会社に来てず~っとその原因を探ってたんですけど、一向に解決しない。しまいにはローカルでも動かなくなる始末。気がついたら日付が変わって日曜になってた。

それでも解決しなかったので、休日出勤してた先輩プログラマの人に助けを求めることにしました。夜12時を回って「そろそろ帰ろうかな~」と先輩がパソコンの電源を落とした瞬間に助けを求めました。何の後ろめたさもなく助けを求めました。休日出勤の疲れもだいぶたまっていたと思うけどそんなことはお構いなく助けを求めました。

助けを求めました。

こういうときはだいたいパスが原因だと先輩がおっしゃったので、その辺りを中心に原因を追究していったんですが、なかなか解決しませんでした。気がついたら3時を過ぎてました。でも先輩は根気良くつき合ってくれました。

実際に原因はパスでした。

実は僕が使ってるjquery.jplayer.jsのソースはちょっと古いやつなんですけど、ソースの中身にこんな記述があるんですよ。

var config = {
    ready: null,
    cssPrefix: "jqjp",
    swfPath: "/",
    volume: 100,
    oggSupport: false,
    position: "absolute",
    width: 0,
    height: 0,
    top: 0,
    left: 0,
    quality: "high",
    bgcolor: "#ffffff"
};
$.extend(config, options);

var configWithoutOptions = {
    id: $(this).attr("id"),
    swf: config.swfPath + ((config.swfPath != "") ? "/" : "") + "Jplayer.swf",
    fid: config.cssPrefix + "_flash_" + $.jPlayerCount,
    aid: config.cssPrefix + "_audio_" + $.jPlayerCount,
    hid: config.cssPrefix + "_force_" + $.jPlayerCount,
    i: $.jPlayerCount
};

注目してほしいのは19行目っす。swfというキーにJplayer.swfのパスを入れてるんですけど、これ、config.swfPathの値が空じゃなかったら、スラッシュをつけ足すようになってるんですね。で、まあ4行目を見てもらうと分かるんですけど、config.swfPathには初期値として『/』を入れてるんですよ。Jplayer.swfはウェブルートの直下に置いたからこれで良いかなと思っていたんですけど、上記のような書き方だと、swfファイルへのパスは以下のような感じになっちゃうんですね。

http://norm-nois.com//Jplayer.swf

ドメイン名の下にスラッシュが2つついてしまう。これのせいで上手く動かなかったようです。正確には、IEだと動くんですけど、FirefoxやOperaだと動かなかった。前回と逆ですね。前回はIEだと動かなかった。

ローカルだと//ってなってても問題なく動くいちゃうんですよね~。だから気づきませんでした。

なので、もう思い切ってこの19行目を書き換えて対応しました。

swf: "/Jplayer.swf"

これなら何の問題もない。たぶん。とりあえず今はこれで動いてます。主に先輩プログラマのおかげで、主にっていうか100%その人のおかげです。ありがらす!

まったく、javascriptさんはとんだじゃじゃ馬だっぜ。

まだコメントはいただけてないみたい……
もしかしたら何か関連しているかも?