これは大変だ。
さっそく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以外のブラウザを使ってください。
修正された部分(str = str.substring(0,1) + str.substring(1); を挿入したこと)については、これでFireFoxでのエラーが直るみたいです。
(なぜ、これで直るのかワカラナイのですが、、)
しかし、もう1つ別の問題がありそうです。
Seesaaブログへのコメント投稿用のフォーム以外に、もう1つ別のフォームが隠してあって、
どこか別の所へ、投稿された内容を送信するしくみになっていますね。
それで、1つのボタンで2つのフォームをサブミットするようにJavaScriptで作ってあるようです。
どうもこのへんが怪しいので、テスト用のHTMLを作って実験してみたところ、
FireFoxでは、最初のフォームをサブミットするときに、ページがリロードされて石葉の碁盤が1回消えてしまうようです。
2回目にサブミットされるフォームと連動して、石葉から棋譜データーを取得してコメントに添付するスクリプトが実行されるようになっているので、ちょうど石葉が消えていて、エラーになるのではないかと思いました。
なので、サブミットされるフォームの順番を入れ替えれば、先に石葉からデーターを取得するので、もしかするとエラーにならないかもしれませんが、
そうすると、たぶん最後に別の所のページが表示されてしまうでしょうから、良くないですね。
う〜ん、解決方法が思いつきません。
そもそも同じページの2つのフォームをいっぺんにサブミットするのは、
本来1対1でやることを、2ついっぺんにやって、片方は無視するということですから、ブラウザにとっては想定外のことなんでしょうね。
別の場所にサブミットするのはコメントの内容を自分宛にメール送信するためなのです。
seesaaのメール通知はコメントの内容が含まれていないのでメールでコメントの内容を知りたいと愚痴っていたら通りすがりさんが教えてくださったのです。
この機能は便利に使っているのでfirefox対応は諦めます。
izuizuさん、丁寧にチェックして頂きどうもありがとうございました。
Operaならエラーになりません。
どうやらGeckoエンジンのブラウザのときいけないようです。
解決策として2つ思いつきました。
ひとつは、land.toへの送信を、別Windowで行うようにする方法。
もうひとつは、送信はland.toひとつだけにして、land.to経由でSeesaaに投稿する方法です。
いずれも大改造なので、大変そうです。誰かが作ってくれると良いのですが。(他力本願)
しかし私には猫に小判で具体的にどう改造していいかわかりません。
アクセス解析を見るとfirefoxとNetscapeユーザーはごく僅かなので棋譜投稿を我慢して頂こうと思っています。
Geckoエンジンブラウザの訪問客が多くなってきたらSendmailでコメント記事を見るのを諦めようと思います。
Seesaaがメール通知にコメント本文を記載してくれれば万事解決なのですが、、、、、
乗りかかった船ということで、私が具体案を考えてみました。
別Windowで送信するしくみを試してみましたが、
IEのときは、新しく開いたWindowには、アドレスバーの下に「セキュリティー保護のため...」というメッセージのバーが表示され、それをクリックしないと送信してくれないので、イマイチでした。
そこで、ブラウザによって処理を分ける方法を考えました。
問題のページ(kifutoukou.htmlとsgfpost.html)の
<script language=Javascript>と</script>の間のどこでも良いのですが、
まあ、</script>のすぐ上にでも、以下を挿入して下さい。
で、その下の方にある以下の部分を削除して、
以下のように書き換えます。
これで、Geckoブラウザのときだけ別Windowを開いて送信し、
Gecko以外のときは、今まで通りの動きをしてくれます。
しかし、Geckoさんのときに、別に開いたWindowに「メール送信成功」というページが表示されるのが気になるので、
land.toのsdmail.cgiで表示される、「メール送信成功」というページの
HTMLの記述の最初と最後に、<body onLoad=window.close()>と、</body>を
入れるようにしておけば、自動的にすぐ閉じてくれるので良いと思います。
もしそうなら、無意味なので「記事タイトル」「記事URL」と書いてある2行ずつを行ごと削除しても良いかと思います。
さっそく修正したところfirefoxでも棋譜投稿ができるようになりました。
お忙しいところscriptまで作って頂き恐縮です。
どうもありがとうございました。
これは
print "Content-type: text/html\n\n";
の前の行に
print "<body onLoad=window.close()>を記入すればいいのでしょうか。
メールを受信する方で必要とするのではないかと思うのですが、、、
firefoxからsendmailされる記事は文字化けするのです。
たしかに受信する方では記号のまま受信でURLやタイトルにデコードされていませんね。
たしかにそうですね。
削除することにします。
ありがとうございました。
半角文字の http:// が記載、お名前欄が空白または日本文字が全然ないコメントは投稿できません。ボタンをクリックしても投稿フォームが閉じないときはこれらに該当していないか確認してください。
私は自説に固執しません。意見交換を重ねるに従いトップページの意見に修正が加えられますから議論される場合はコメントの流れに目を通していただけると幸いです。
棋譜投稿 ←をクリックすると碁盤付きのコメントが書けます。
詳細はをご参照ください。
↓普通のコメントを書く