ページ 11

IEのwindow.openはBASEタグ非対応?

Posted: 2011年2月09日(水) 14:05
by kazuike
MODxとは直接関係ないかもしれませんが、
MODxでBASEタグを利用することは多いと思いますので投稿します。

私は滅多に使わないので、もしかしたら世間では常識なのかもしれませんが、
MODx導入サイトで、Javascriptの「window.open」を使って開くウィンドウが、
IE(6,7,8)では「Not Found」になるという現象がありました。
(Firefox、Chrome、Safariでは問題ありません)

よく見ると、開こうとしているアドレスが違うようで、
例えば、
http://www.hogehoge.com/fugafuga/index.html」が以下のようだとすると

コード: 全て選択

<base href="http://www.hogehoge.com/" />
:
window.open('fugafuga/subwin.html',…
IEだと、
http://www.hogehoge.com/fugafuga/fugafu ... l」を開こうとします
Firefox、Chrome、Safariだと、
http://www.hogehoge.com/fugafuga/subwin.html」を開こうとします

ちなみに、BASEタグは、<head>~</head>の間に記述しています。

もしかして、
そもそも「window.open」には、相対パスを使ってはいけない仕様だったりするのでしょうか?

Re: IEのwindow.openはBASEタグ非対応?

Posted: 2011年2月10日(木) 01:59
by soushi
soushiです。

BASEタグ付けてIEのwindow.open()使ってみましたが、確かにkazuikeさんの書かれている通りの動作をしますね…。
適当にgoogleで検索しても同様の現象で困っている人がいたので、IE独自の挙動なのかもしれません。

バッドノウハウになるかもしれませんが、以下の方法で解決できそうです。

スニペット作成:base_dir

コード: 全て選択

return str_replace('//','/',dirname($_SERVER['PHP_SELF']).'/');
window.openでは以下のように記述。

コード: 全て選択

window.open('[[base_dir]][~id~]',...
これでIEでも動くようになりました。
あとスニペットを[!base_dir!]にして、AgentがIEの時だけ追加するという処理を入れてもいいかもしれません。
御参考までに :P