2010年9月26日日曜日

外部ファイルの読み込みで苦労したこと2点

静的HTMLに外部ファイルを読み込むことを依頼された。
本業ではないが、自分のところのサイトでも応用できたらいいなと思っていたので、
お引き受けして研究したが、これが苦労した。

PHPが使えない環境だったので、JavaScriptで読み込もうとしたのだが、どうもうまくいかなかった。

最初に試みたのが「incl.js」。
テストサーバではIE・Firefoxともちゃんと表示されたので、アップしてIEでのみ確認しておいた。
ところがある日、Firefoxでは「読み込み中」で止まっている(IEはOK)ことが分かった。

すぐにエラーコンソールを見れば解決が早かったのだが、普段この機能を使っていないので(汗)、とっても遠回りしてしまった。

スクリプトかなぁ?というわけで、jQueryのloadにチャレンジ。
ところが今度は、ローカルでもテストサーバでもFirefoxが「読み込み中」で止まる。
タスクバーを見ると「google-analyticsに接続中」で止まっている感じ。
ググってみると「google-analyticsと衝突する」というような記述を発見。

確かにgoogle-analyticsは入れているが、使えないのか? それは困る。
HTMLから解析コード部分を消して、キャッシュをクリアしても同じ状態。

そこでようやく答えが分かった。

読み込まれる側のHTMLにもgoogleの解析コードがあったのだ。
そちらが“衝突”しているらしい。
読み込まれる側からコードを消し、読み込む側には入れてみると、OK。
(ここがポイント2)

テスト環境で確認して本番に投入。
ところがやっぱりFirefoxが「読み込み中」で止まる。
ここに至ってようやくエラーコンソールを見ることを思いつく。

エラー: geovisit is not definedソースファイル: http://???????.???/行: 0

エラー: document.getElementById(divId) is nullソースファイル: http://bc.geocities.yahoo.co.jp/js/no.js行: 32

そう、本番環境は「ジオシティーズ」だったのだ。
(テスト環境は自分のところのサーバ。)
つまり、ジオシティーズのサーバが勝手に付けるコードが原因。
最初の段階で気がつけば良かった。(ここがポイント1の答え)

結局スクリプトを「prototype.js」に変えてで両方表示できた。
(何故かローカルでは表示できなかった)

prototype.jsはlightboxでも使ってるスクリプトで、競合しそうなので、
できれば使いたくない。
何より、便利なjQueryが使えないのは痛い。

以上が本当の答えなのかどうかわからないが、
釈然としないなぁ…