月別アーカイブ: 2009年2月

javascriptのwindow.openで_blankを全部タブじゃなくて別ウィンドウにする

javascriptを久しぶりにいじった。

タブブラウザでウィンドウを_blankで開くと新しいタブが開くことが多いと思いますが、そうするとちょっと不具合があることがあったので解決策を模索しました。不具合というのは新しく開いたウィンドウ(タブ)先でウィンドウサイズ変更を行っていることでした。タブブラウザではウィンドウは当然くっついてるので全部のタブでそのウィンドウサイズになってしまい、具合が悪かったわけです。

そこで下記のようにして一括解決しました。クロスブラウザになってるかは未調査。operaとかsafariとかでは動くのか心配です。。

とりあえずメモしておきます。
やっていることは

  • 全部のaタグを取り出して
  • その中のtargetが_blankのものを取り出して
  • _blankを消し、
  • 変わりにonClickイベントを追加してます。

html側は普通に<a href=”xxxx.html” target=”_blank”>xxxx</a>のようにしてるだけです。

function getURL(e,myThis){
var myURL = myThis.href;
w = window.open(myURL, null,’toolbar=yes,location=yes,status=yes,menubar=yes,scrollbars=yes,resizable=yes’);
e.returnValue = false;
e.preventDefault ();
}
function setEventListener(element, type, listener) {
if (element.addEventListener){
element.addEventListener(type, function(e){listener(e,this)}, false);
}else if (element.attachEvent){
element.attachEvent(‘on’ + type, function(e){listener(e,e.srcElement)});
}
}
function init(){
var aTags = document.getElementsByTagName(‘a’);
var aTagsLen = aTags.length;
for(var i=0;i<aTagsLen;i++){
element = aTags[i];
if(element.target == “_blank”){
element.target = “”;
setEventListener(element,”click”,getURL);
}
}
}

init()はbody.onloadで呼び出してますー。

追記

バグあります。IEでは正常にうごきませんのでご注意ください。