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

質問全般・改善要望
返信する
kazuike
メンバー
メンバー
記事: 507
登録日時: 2009年8月12日(水) 12:53

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

投稿記事 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」には、相対パスを使ってはいけない仕様だったりするのでしょうか?
▼ウェブ屋のCMS→modxヒキダス流(備忘録)
http://d.hatena.ne.jp/hikidas_ikeda/
soushi
管理人
記事: 224
登録日時: 2009年7月30日(木) 01:59

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

投稿記事 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
返信する