2007年02月20日

火狐は棋譜投稿でけん

 izuizuのタイゼム囲碁日記石葉とFirefoxとIEとにfirefoxに棋譜投稿するとエラーになるという報告を受け修正したと書かれていた。
 これは大変だ。
 さっそくkifutoukou.htmlとsgfpost.htmlをfirefoxでテストするとやはりエラーになる。
 izuizuさんの記事を参考に
function eras(str) {
str = str.replace(/\n/g, ""); // 棋譜の改行を削除
str = str.replace(/ /g, ""); // 棋譜のスペースを削除
return str;
}
function eras(str) {
str = str.substring(0,1) + str.substring(1); // firefox用
str = str.replace(/\n/g, ""); // 棋譜の改行を削除
str = str.replace(/ /g, ""); // 棋譜のスペースを削除
return str;
}
と修正してテストするが相変わらずエラーになる。
 izuizuさんの記事にある
str = LeafShow.GetKifuStr();
str = str.substring(0,1) + str.substring(1);
部分を修正していなかったのがいけないのだろう。
 そこでこのコードを参考に
function add() { document.forms[0].article_child__body.value += "\n" + "<a href=\"http://qin.seesaa.net/image/sgfpost.html?" + id + "&" + eras(LeafShow.GetKifuStr('SGF_ALLDATA')) + "\" target=_blank><img src=http://qin.seesaa.net/image/katsura4sun.gif border=0></a>"; }
function goban() {open("reca.html?" + eras(LeafShow.GetKifuStr()))}
function add() {
str = LeafShow.GetKifuStr('SGF_ALLDATA');
kifu = str.substring(0,1) + str.substring(1);
document.forms[0].article_child__body.value += "\n" + "<a href=\"http://qin.seesaa.net/image/sgfpost.html?" + id + "&" + eras(kifu) + "\" target=_blank><img src=http://qin.seesaa.net/image/katsura4sun.gif border=0></a>";
}
function goban() {
str = LeafShow.GetKifuStr();
kifu = str.substring(0,1) + str.substring(1);
open("reca.html?" + eras(kifu));
}
と修正してテストしたがやはりエラーになる。
 javascriptの知識がない人間がデッドコピーではなく自己流に応用しようとしたことが間違いのもとのようだ。
 IEでエラーになっては大変なので元に戻した。
 棋譜投稿をするときはfirefox以外のブラウザを使ってください。
posted at 08:27 | Comment(13) | TrackBack(0) | 情報技術
この記事へのコメント
問題のページ(kifutoukou.htmlとsgfpost.html)のソースを拝見しました。

修正された部分(str = str.substring(0,1) + str.substring(1); を挿入したこと)については、これでFireFoxでのエラーが直るみたいです。
(なぜ、これで直るのかワカラナイのですが、、)

しかし、もう1つ別の問題がありそうです。

Seesaaブログへのコメント投稿用のフォーム以外に、もう1つ別のフォームが隠してあって、
どこか別の所へ、投稿された内容を送信するしくみになっていますね。
それで、1つのボタンで2つのフォームをサブミットするようにJavaScriptで作ってあるようです。

どうもこのへんが怪しいので、テスト用のHTMLを作って実験してみたところ、
FireFoxでは、最初のフォームをサブミットするときに、ページがリロードされて石葉の碁盤が1回消えてしまうようです。
2回目にサブミットされるフォームと連動して、石葉から棋譜データーを取得してコメントに添付するスクリプトが実行されるようになっているので、ちょうど石葉が消えていて、エラーになるのではないかと思いました。

なので、サブミットされるフォームの順番を入れ替えれば、先に石葉からデーターを取得するので、もしかするとエラーにならないかもしれませんが、
そうすると、たぶん最後に別の所のページが表示されてしまうでしょうから、良くないですね。

う〜ん、解決方法が思いつきません。

そもそも同じページの2つのフォームをいっぺんにサブミットするのは、
本来1対1でやることを、2ついっぺんにやって、片方は無視するということですから、ブラウザにとっては想定外のことなんでしょうね。

Posted by izuizu at 2007年02月20日 18:53

 izuizuさん、ありがとうございます。
 別の場所にサブミットするのはコメントの内容を自分宛にメール送信するためなのです。
 seesaaのメール通知はコメントの内容が含まれていないのでメールでコメントの内容を知りたいと愚痴っていたら通りすがりさんが教えてくださったのです。
 この機能は便利に使っているのでfirefox対応は諦めます。
 izuizuさん、丁寧にチェックして頂きどうもありがとうございました。

Posted by 島谷 at 2007年02月21日 03:15

 Netscape7.1でもエラーになります。
 Operaならエラーになりません。
 どうやらGeckoエンジンのブラウザのときいけないようです。

Posted by 島谷 at 2007年02月22日 06:18

ネットを色々調べてみると、やはり、同じページで、2つのフォームをいっぺんにサブミットするのは無理があるようです。

解決策として2つ思いつきました。
ひとつは、land.toへの送信を、別Windowで行うようにする方法。
もうひとつは、送信はland.toひとつだけにして、land.to経由でSeesaaに投稿する方法です。
いずれも大改造なので、大変そうです。誰かが作ってくれると良いのですが。(他力本願)

Posted by izuizu at 2007年02月22日 12:56

 izuizuさん、アイディア提供ありがとうございます。
 しかし私には猫に小判で具体的にどう改造していいかわかりません。もうやだ〜(悲しい顔)
 アクセス解析を見るとfirefoxとNetscapeユーザーはごく僅かなので棋譜投稿を我慢して頂こうと思っています。
 Geckoエンジンブラウザの訪問客が多くなってきたらSendmailでコメント記事を見るのを諦めようと思います。
 Seesaaがメール通知にコメント本文を記載してくれれば万事解決なのですが、、、、、

Posted by 島谷 at 2007年02月22日 14:51

 コメントはすべて2つのフォームでサブミットしているので棋譜がなくても受け付けないのかとテストしてみたところ棋譜がない場合は両方に送信されました。

Posted by 島谷 at 2007年02月23日 15:23

待っていても、誰も作ってくれないようなので、
乗りかかった船ということで、私が具体案を考えてみました。

別Windowで送信するしくみを試してみましたが、
IEのときは、新しく開いたWindowには、アドレスバーの下に「セキュリティー保護のため...」というメッセージのバーが表示され、それをクリックしないと送信してくれないので、イマイチでした。
そこで、ブラウザによって処理を分ける方法を考えました。

問題のページ(kifutoukou.htmlとsgfpost.html)の
<script language=Javascript>と</script>の間のどこでも良いのですが、
まあ、</script>のすぐ上にでも、以下を挿入して下さい。

function sousin(){
if(navigator.userAgent.indexOf("Gecko/") != -1){
windowVar=window.open('','');
windowVar.document.write('<html><head>\n'
+'<script language=Javascript>\n'
+'function landto(){\n'
+'document.forms[0].body.value='
+'\'投稿者: ' + document.forms[0].article_child__writer.value + '\\n\'\+\n'
+'\'記事タイトル: <% individual_article.subject %>\\n\'\+\n'
+'\'記事URL: <% individual_article.page_url %>\\n\\n\'\+\n'
+'\'' + document.forms[0].article_child__body.value + '\'\n'
+'document.forms[0].nn.click()'
+'}\n'
+'</scr' + 'ipt></head><body onLoad=landto()>\n'
+'<form method=POST action=http://shimatani.ty.land.to/sdmail/sdmail.cgi target=_self>\n'
+'<input type=hidden name=mail value=\"shimatani@1959.jukuin.keio.ac.jp\" />\n'
+'<input type=hidden name=subject value=\"島谷的舞録゛からコメント通知\">\n'
+'<input type=submit name=nn value=vv style=visibility:hidden />\n'
+'<input type=hidden name=from value=qin@blog.seesaa.jp />\n'
+'<input type=hidden name=body /></form>\n'
+'</body></html>');
windowVar.document.close();
document.forms[0].posted.click();
}else{
document.forms[1].body.value=
'投稿者: ' + document.forms[0].article_child__writer.value + '\n' +
'記事タイトル: <% individual_article.subject %>\n' +
'記事URL: <% individual_article.page_url %>\n\n' +
document.forms[0].article_child__body.value;
document.forms[1].nn.click();
d1 = new Date().getTime() + 2000;
d2 = new Date().getTime();
while(d2 < d1) { d2 = new Date().getTime(); }
document.forms[0].posted.click();
}
}

で、その下の方にある以下の部分を削除して、

<input type="button" class="input-submit" value="書き込む"
onClick="document.forms[1].body.value=
'投稿者: ' + document.forms[0].article_child__writer.value + '\n' +
'記事タイトル: <% individual_article.subject %>\n' +
'記事URL: <% individual_article.page_url %>\n\n' +
document.forms[0].article_child__body.value;
document.forms[1].nn.click();
d1 = new Date().getTime() + 2000;
d2 = new Date().getTime();
while(d2 < d1) { d2 = new Date().getTime(); }

document.forms[0].posted.click();

" />

以下のように書き換えます。

<input type="button" class="input-submit" value="書き込む"
onClick="sousin();
" />

これで、Geckoブラウザのときだけ別Windowを開いて送信し、
Gecko以外のときは、今まで通りの動きをしてくれます。

しかし、Geckoさんのときに、別に開いたWindowに「メール送信成功」というページが表示されるのが気になるので、
land.toのsdmail.cgiで表示される、「メール送信成功」というページの
HTMLの記述の最初と最後に、<body onLoad=window.close()>と、</body>を
入れるようにしておけば、自動的にすぐ閉じてくれるので良いと思います。


Posted by izuizu at 2007年02月23日 19:13

この方法は、もともと、記事タイトルと記事URLは、記号の記述が送信されるだけで機能していないのではないでしょうか?
もしそうなら、無意味なので「記事タイトル」「記事URL」と書いてある2行ずつを行ごと削除しても良いかと思います。

Posted by izuizu at 2007年02月23日 19:21

 izuizuさん、どうもありがとうございます。
 さっそく修正したところfirefoxでも棋譜投稿ができるようになりました。
 お忙しいところscriptまで作って頂き恐縮です。
 どうもありがとうございました。
HTMLの記述の最初と最後に、<body onLoad=window.close()>と、</body>を入れるようにしておけば、自動的にすぐ閉じてくれるので良いと思います。
 これは
print "Content-type: text/html\n\n";
の前の行に
print "<body onLoad=window.close()>を記入すればいいのでしょうか。
この方法は、もともと、記事タイトルと記事URLは、記号の記述が送信されるだけで機能していないのではないでしょうか?
 メールを受信する方で必要とするのではないかと思うのですが、、、


Posted by 島谷 at 2007年02月24日 05:09

 land.toのsdmail.cgiにprint "<body onLoad=window.close()>"とprint"</body>"を加えるとsendmailできなくなるので元に戻しました。

 firefoxからsendmailされる記事は文字化けするのです。
Subject: 蟲カ隹キ逧・・骭イ繧帙°繧峨さ繝。繝ウ繝磯夂衍
Date: 24 Feb 2007 05:47:22 +0900
From: qin@blog.seesaa.jp
To: shimatani@1959.jukuin.keio.ac.jp

【発信者】
=================
謚慕ィソ閠・シ・蟲カ隹キ

險倅コ九ち繧、繝医Ν: <% individual_article.subject %>

險倅コ偽RL: <% individual_article.page_url %>

land.to縺ョsdmail.cgi縺ォprint "<body onLoad=window.close()>"縺ィprint"</body>"繧貞刈縺医k縺ィsendmail縺ァ縺阪↑縺上↑繧九・縺ァ蜈・↓繧ゅ←縺励※蜀阪ユ繧ケ繝・


Posted by 島谷 at 2007年02月24日 05:51

 Netscape7.1では文字化けはしないのですがSeesaaに棋譜が貼付されません。

Posted by 島谷 at 2007年02月24日 06:16

>この方法は、もともと、記事タイトルと記事URLは、記号の記述が送信されるだけで機能していないのではないでしょうか?
 メールを受信する方で必要とするのではないかと思うのですが、、、

 たしかに受信する方では記号のまま受信でURLやタイトルにデコードされていませんね。
もしそうなら、無意味なので「記事タイトル」「記事URL」と書いてある2行ずつを行ごと削除しても良いかと思います。
 たしかにそうですね。
 削除することにします。
 ありがとうございました。

Posted by 島谷 at 2007年02月24日 06:58

 「記事タイトル」「記事URL」と書いてある2行ずつを行ごと削除したところsendmailできなくなってしまったので元に戻しました。

Posted by 島谷 at 2007年02月24日 09:35

 このブログはコメントの編集や削除をすることができません。コメントの編集や削除が必要な場合は私宛にメールをお願いします。
 半角文字の http:// が記載、お名前欄が空白または日本文字が全然ないコメントは投稿できません。ボタンをクリックしても投稿フォームが閉じないときはこれらに該当していないか確認してください。
 私は自説に固執しません。意見交換を重ねるに従いトップページの意見に修正が加えられますから議論される場合はコメントの流れに目を通していただけると幸いです。

棋譜投稿 ←をクリックすると碁盤付きのコメントが書けます。
        詳細はをご参照ください。

↓普通のコメントを書く

お名前:  [必須]

メールアドレス:

コメント:

この記事へのトラックバック