人気ブログランキング | 話題のタグを見る
AX
InternetExplorerのwindow.openでエラー
またしてもIE。
InternetExplorer8で事象が発生することを確認しました。

Javascriptで新しいウィンドウでページを開かせる時に使うwindow.openの不具合です。

window.open は引数を3つ取ります。
□ 第一引数
 URL。新しいウィンドウで開きたいURL。必須。
 例:"http://www.google.co.jp/"
□ 第二引数
 ウィンドウ名。任意。
 ここで言うウィンドウ名は返り値でもあるwindowオブジェクトのname属性。
 このウィンドウ名はAタグでtargetとして指定することができる。
 例:"popupwindow"
□ 第三引数
 パラメータ。任意。
 どういう新しいウィンドウを表示するかを決める付加情報。
 例:"width=800,height=640,resizable=yes"

このうちの2つ目。ウィンドウ名を指定するための値に"ある文字"を含めるとエラーになってしまう。
というIEの不具合です。
で、ウィンドウ名に使ってはいけない"ある文字"とは。。。たくさんあります( ̄▽ ̄;)
なので、むしろ使っていい文字は何かを言いますと、
InternetExplorer(おそらく8以下)でwindow.openの第二引数として指定して良い文字は
半角英数字のみだと思われます。
なぜ、「思われます」と曖昧かというと、MSのページにそのことに関する情報が載っていないため。(==;
ということで、半角英数字のみを使いましょう。
他のブラウザはたぶん大丈夫です。少なくともSafariは特殊な文字を含めても大丈夫でした。







わたしの場合は、ウィンドウ名を固有にするために(ウィンドウの乗っ取りが発生しないようにするために)
どうしても半角英数字のみだと不便だったので特定の文字列を半角英数字のみに変換するスクリプト作成しました。


function createWindowName(value){
// 半角英数字以外の文字を取り除く
return value.replace(/[^0-9a-zA-Z]*/g,"");
}


これだと日本語を指定した時など、空文字になってしまうので次のようにしておくと安心かも。



function createWindowName(value){
// 文字列をエンコード処理した後、半角英数字以外の文字を取り除く
return encodeURIComponent (value).replace(/[^0-9a-zA-Z]*/g,"");
}


IE不便過ぎだろー。MSの提供の情報しょぼすぎだろー。
by manodeldio | 2013-04-03 00:38 | プログラミング


<< 【DSiWare】任天童子 配... 【iPhone】ユーザインター... >>