2006/12/17

Open Link as New Window

なんとなくWidgetを作ってみたくて、投稿内のリンクを別窓で開くWidgetを作ってみました。

ちょっと力業のコードですがFirefoxとInternetExplorerでの動作を確認しています。

コードはこのページのソースを参照して頂ければとか思うのですが、余白・改行を詰めてあるので見れたものではありませんので以下に。
var org=window["onload"];
window["onload"]=
(typeof org!="function"?
function(event){insertTargetAttribute(document.body,'post-body')}:
function(event){org(event);insertTargetAttribute(document.body,'post-body')});

function insertTargetAttribute(e,className){
for( var eChild=e.firstChild;eChild!=null;eChild=eChild.nextSibling){
if(eChild.nodeName=='A'&&eChild.nodeType==1&&hasClassName(eChild,className))
eChild.setAttribute("target","_blank");
insertTargetAttribute(eChild,className);
}
}

function hasClassName(elm,className){
if(elm==null)return false;
if(elm.nodeType==1)
if(elm.getAttribute("class")==className||elm.getAttribute("className")==className)
return true;
return hasClassName(elm.parentNode,className);
}


要するにclassがpost-bodyなタグ以下にあるAnchor TagにAttribute target="_blank"を追加しています。今風というかXHTML 1.1とかですとtarget="_blnak"なんて廃止されちゃってたり、そもそも嫌いな方もいらっしゃるのは承知の上ですが、BloggerのWidgetでこんな機能も付加できる例としてはアリじゃないかと。

普通に投稿するときにAnchor Tagにtarget="_blank"を追加して書いてれば、こんな物は必要ありません。 本題としてはBloggerのWidget機能に対する考察であったり、Postされた記事に対しての後加工みたいな感じです。Visual系(?)な人がネタさえ考えたらもっと素敵(≒馬鹿)な事が出来そうな予感もありますし。

ちなみにGoogleというかBloggerにRequestとして、追加したWidgetのタイトルを非表示に出来るようにしてくれって事があったりします。HTML/JavaScriptなPage Elementを複数追加してると混乱しませんか?

それからこのコードのhasClassName()なんて、もっとオシャレな書き方・処理があるんじゃないかと思うんですが、どなたかアドバイス頂けたら幸いです。ちなみにprototype.jsは無しの方向で。

この下のボタンでWidgetを追加できます。お好きな方はご活用ください。



気が向いたらjavascriptでOpen as New Windowするコードで書き換えてみたりするつもりです。

それから別途にSnap Preview Anywhereとかも設定してたりして、ちょっとウザい事になってますが、今回のWidgetとは関係ありませんというか、Inspireされてたりします。

それと某巨大掲示板からリンクされてたのがTriggerだったりします・・。

関連のありそうな記事

0 コメント: