baseタグと各種ブラウザについての質問です。


あるブラウザで各種HTMLタグにおけるhref属性の様な文字列を送信した場合で、かつ、送信先ページに値部分と同じURLを持つbaseタグが記述されている場合、baseタグが認識されないといった問題に直面しています。
具体的には次のページのような感じです。
http://true-web.org/test/test_base.php
Chrome、Safariなどで1番を送信した場合、baseタグが認識されず、相対パスで指定した画像が表示されなくなります。
(IEとFirefoxは問題なし)
※ソース http://true-web.org/test/test_base.txt



それで、質問なのですが、この事象はブラウザ側のバグなのでしょうか?
もしバグでないとしたらBaseタグは使わないほうがいいのでしょうか?
考え方を教えてください。
よろしくお願いします。

ブラウザのバージョン
IE8.0
Firefox5.0.1
Safari5.1
Chrome16.0.912.63 m

OS
Windows XP home sp3

回答の条件
  • 1人3回まで
  • 13歳以上
  • 登録:2011/12/14 19:36:24
  • 終了:2011/12/19 10:52:53

ベストアンサー

id:nattow No.1

nattow回答回数102ベストアンサー獲得回数272011/12/14 21:36:28

ポイント150pt

chrome で一度送信すると、base URI が "http://true-web.org/test/" になってしまうようですね。(もう一度送信すると http://true-web.org/test/test/test_base.php に遷移して Not Found になるので、そこは間違いないと思います。)
また、href 属性の様でない文字列を送信しても何の問題もありませんね。
そして、「href="true-web.org"」や「href="aaa"」など、属性値に当たる部分を URI ではない文字列に変えて送信しても何の問題もありませんでした。
さらに、「href="http://true-web.org"」や「href="http://true-web.orgx"」でも何の問題もありませんでした。

以上より推測の域を出ませんが、「href 属性の様な文字列」かつ「自身のドメインを含む文字列(←ちょっと不正確な表現ですが)」を送信した場合に base 要素が無効になり、"http://true-web.org/test/test_base.php" が base になっていると考えられます。

結論としては、個人的には chrome の不具合だと思いますが・・・。

例えばですが、 base より先に「href 属性の様な文字列」が含まれる文字列を処理する場合、(それがフォームパラメータであろうがお構いなしに)base 要素の処理をキャンセルするような実装になっている、とか?

他1件のコメントを見る
id:nattow

chrome と Safari で同じ症状ということは、レンダリングエンジン(WebKit)の問題なのかも、と思って LUNASCAPE を WebKit で動かしてみたところ問題なく動きました・・・。

2011/12/15 02:26:50
id:masashi0316

私もLUNASCAPEで試してみました。問題ないっすね・・・
まいりました。

2011/12/15 11:53:43

その他の回答(1件)

id:nattow No.1

nattow回答回数102ベストアンサー獲得回数272011/12/14 21:36:28ここでベストアンサー

ポイント150pt

chrome で一度送信すると、base URI が "http://true-web.org/test/" になってしまうようですね。(もう一度送信すると http://true-web.org/test/test/test_base.php に遷移して Not Found になるので、そこは間違いないと思います。)
また、href 属性の様でない文字列を送信しても何の問題もありませんね。
そして、「href="true-web.org"」や「href="aaa"」など、属性値に当たる部分を URI ではない文字列に変えて送信しても何の問題もありませんでした。
さらに、「href="http://true-web.org"」や「href="http://true-web.orgx"」でも何の問題もありませんでした。

以上より推測の域を出ませんが、「href 属性の様な文字列」かつ「自身のドメインを含む文字列(←ちょっと不正確な表現ですが)」を送信した場合に base 要素が無効になり、"http://true-web.org/test/test_base.php" が base になっていると考えられます。

結論としては、個人的には chrome の不具合だと思いますが・・・。

例えばですが、 base より先に「href 属性の様な文字列」が含まれる文字列を処理する場合、(それがフォームパラメータであろうがお構いなしに)base 要素の処理をキャンセルするような実装になっている、とか?

他1件のコメントを見る
id:nattow

chrome と Safari で同じ症状ということは、レンダリングエンジン(WebKit)の問題なのかも、と思って LUNASCAPE を WebKit で動かしてみたところ問題なく動きました・・・。

2011/12/15 02:26:50
id:masashi0316

私もLUNASCAPEで試してみました。問題ないっすね・・・
まいりました。

2011/12/15 11:53:43
id:kodairabase No.2

kodairabase回答回数661ベストアンサー獲得回数802011/12/15 22:11:59

ポイント50pt

>※ソース http://true-web.org/test/test_base.txt
http://true-web.org/test/test_base.php の内容と違いますし、何らかのJavaScriptを読み込んでいるようですので、そもそもPHPプログラムに問題があるのではないでしょうか?
ご確認ください。

自前のサーバ(Apache 2.4)で http://true-web.org/test/test_base.txt を実行したところ、chromeやsafariでも問題なく動きました。

id:masashi0316

ご確認ありがとうございました。
送信されてきたデータについてPHPでなんら処理してませんし、
Javascriptも読み込んでません。

参考にあげたURLのサーバがPHPやCGIでないと、POSTデータを受け取らない仕様だったのでPHPで書いただけなのですが、別のサーバでHTMLのみで同じことを試しましたが結果は同じでした。

しかしながらいろいろご尽力いただきましてありがとうございました。
差し支えなければお試しいただいたページのURLを教えていただけたら幸いです。

2011/12/16 00:25:31

コメントはまだありません

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

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

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

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