あるブラウザで各種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
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 要素の処理をキャンセルするような実装になっている、とか?
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 要素の処理をキャンセルするような実装になっている、とか?
chrome と Safari で同じ症状ということは、レンダリングエンジン(WebKit)の問題なのかも、と思って LUNASCAPE を WebKit で動かしてみたところ問題なく動きました・・・。
私もLUNASCAPEで試してみました。問題ないっすね・・・
まいりました。
>※ソース 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でも問題なく動きました。
ご確認ありがとうございました。
送信されてきたデータについてPHPでなんら処理してませんし、
Javascriptも読み込んでません。
参考にあげたURLのサーバがPHPやCGIでないと、POSTデータを受け取らない仕様だったのでPHPで書いただけなのですが、別のサーバでHTMLのみで同じことを試しましたが結果は同じでした。
しかしながらいろいろご尽力いただきましてありがとうございました。
差し支えなければお試しいただいたページのURLを教えていただけたら幸いです。
chrome と Safari で同じ症状ということは、レンダリングエンジン(WebKit)の問題なのかも、と思って LUNASCAPE を WebKit で動かしてみたところ問題なく動きました・・・。
2011/12/15 02:26:50私もLUNASCAPEで試してみました。問題ないっすね・・・
2011/12/15 11:53:43まいりました。