アプリ版:「スタンプのみでお礼する」機能のリリースについて

javascript初心者です。

2回目以降、リンク先が一つのページ上に上書きされてしまいます。
リンク先を開くたび新しい窓で開きたいのですがどうしたらよいのでしょうか?
target=_blankやwindow.openなどではないかと思いますが設置場所がよくわかりません。。

また、サンプルソースを見てもjavascriptの部分がいまいち理解できずにいます。
だいたいの流れやURLクリエの部分(HTMLの部分)はなんとなく理解できるのですが文字コードなど表示方法などのところがよくわかりません;;
わかりやすくコメントを書いていただけると助かります!



ソースはこちらです↓
------------------------------------------------------------------------------


<body>
<noscript>JavaScriptが無効です</noscript>


<form name="fm" action="void" onSubmit="return false;">
<table style="background-color: #e0e0e0"><tr><td>
<input Type="text" name="k" size="60" maxlength="255" value="" onKeyPress="if(event.keyCode == 13) { search('google'); }">
<input Type="reset" value="Reset">
</td></tr><tr><td>
<input Type="submit" value="Google" onClick="search('google');">
<input Type="submit" value="Yahoo!" onClick="search('yahoo');">
</td></tr></table>
</form>


<!-- Google -->
<form name="f_google" method="GET" action="http://www.google.com/search" Accept-charset="Shift_JIS">
<input type="hidden" name="q" value=""><input type="hidden" name="ie" value="Shift_JIS">
<input type="hidden" name="oe" value="Shift_JIS"><input type="hidden" name="hl" value="ja">
<input type="hidden" name="lr" value="lang_ja"><input type="hidden" name="num" value="20">
</form>
<!-- Yahoo! -->
<form name="f_yahoo" method="GET" action="http://search.yahoo.co.jp/search" Accept-charset="Shift_JIS">
<input type="hidden" name="ei" value="SJIS">
<input type="hidden" name="fr" value="sfp">
<input type="hidden" name="p" value="">
</form>
<script LANGUAGE="JavaScript" Type="text/javascript">
<!--
function setutf(fx){
bkup=document.charset;
document.charset="utf-8";
display(fx);
document.charset=bkup;
}

function seteuc(fx){
bkup=document.charset;
document.charset="euc-jp";
display(fx);
document.charset=bkup;
}

function setsjis(fx){
bkup=document.charset;
document.charset="shift_jis";
display(fx);
document.charset=bkup;
}

function display(formx) {
swin=window.open("","category_root","");

formx.target="category_root";
formx.submit(); swin.focus();
}

function sitetop(ur) {
swin=window.open(ur,"category_root","");
swin.focus();
}

function search(eng) {
q=document.fm.k.value;

if(eng=="google") { if(q=="") sitetop("http://www.google.co.jp/"); else { fw=document.f_google; fw.q.value=q; setsjis(fw); }}
if(eng=="yahoo") if(q=="") sitetop("http://www.yahoo.co.jp/"); else { { fw=document.f_yahoo; fw.p.value=q; setsjis(fw); }}
}

//-->
</script>
</body>

A 回答 (1件)

開くたびに新しい窓/タブで開く方法は幾つかあります。


ただし窓なのかタブなのかは環境によって変わるのでご注意ください。

* window.open の第二引数に '_blank' を指定
* 要素 <form> の属性 target に '_blank' を指定して、改行キー or ボタン押下 or submit()
* 要素 <a> の属性 target に '_blank' を指定して、クリック or click()

それにしても、ご提示のサンプルソースがあまり良い教材ではありません。
えらく古いし冗長だし命名も変だし文字コードもUTF8で十分だし...

昔のブラウザを考慮しなければいけない特殊な事情があるなら別ですが、
今ならもっと簡単にすっきり書けます。

<form name=fm>
<input type=text name=k size=60> <button type=reset>Reset</button> <br>
<button type=submit name=ggl>Google</button> <button type=submit name=yho>Yahoo! Japan</button>
</form>
<div style="display:none"><!-- 見せたくないから見せない -->
<form name=subggl method=get target=_blank action="http://www.google.co.jp/search">
<input type=text name=q><a href="http://www.google.co.jp/" target=_blank>top</a></form>
<form name=subyho method=get target=_blank action="http://search.yahoo.co.jp/search">
<input type=text name=p><a href="http://www.yahoo.co.jp/" target=_blank>top</a></form>
</div>

<script>
addEventListener('load', function(){ var _=0; // 読みやすくするオマジナイ
_ ; function searchOnNewTab(name, v) {
_ , _ ; var form = document.forms['sub' + name];
_ , _ ; if (v === '') {
_ , _ , _ ; form.getElementsByTagName('A')[0].click()
_ , _ ; } else {
_ , _ , _ ; form.getElementsByTagName('INPUT')[0].value = v;
_ , _ , _ ; form.submit();
_ , _ ; }
_ ; }
_ ; document.forms['fm'].addEventListener('click', function(ev){
_ , _ ; if (ev.target.type != 'submit') return; // 目的のボタン以外は処理しない
_ , _ ; ev.preventDefault();
_ , _ ; var form = ev.currentTarget;
_ , _ ; var name = ev.target.name;
_ , _ ; var valu = form.elements['k'].value;
_ , _ ; searchOnNewTab(name, valu);
_ ; }, false);
}, false)
</script>

ご参考まで

この回答への補足

お礼と補足が逆でしたね^^;

getElementsByTagNameはsafariでバグがあるそうです
ClassNameにするかボタンにすることで解決できました!

窓かタブかはブラウザの設定でどうにかなりました!

回答ありがとうございまいた!!!

補足日時:2013/11/16 12:57
    • good
    • 0
この回答へのお礼

回答ありがとうございます!
サンプルが古いので助かりました。こんなにすっきりなるんですね!!

窓かタブかはブラウザで変わりますね・・・
すべてタブで開きたいのですが無理なんですかね?

あとなぜかsafariだけフォーム未入力時の処理が動作しなかったです><

お礼日時:2013/11/14 14:32

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!