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

CGI の中でprintを使ってHTMLファイルを出力することができますが、ブラウザで任意の場所を先頭に(スクロールさせて)表示させることができるでしょうか?

hogehoge.cgi
------------------------
  ・
  ・
<a name="label01">
print "AAAAA<BR>";
<a name="label02">
print "BBBBB<BR>";
<a name="label03">
print "CCCCC<BR>";
  ・
  ・
------------------------

上のような場合で、
ブラウザで"BBBBB"を先頭に
(label02 の位置にスクロールさせて)
表示させたいのです。


hogehoge.cgi#label02 で呼び出せばいいというのは
駄目です。
cgi の中で、処理によって表示の位置を
label01, label02, label03 と
ダイナミックに切り替えたいからです。

HTMLヘッダで Refresh を指定して、
再読み込みさせることもできますが、
携帯電話のブラウザではうまくいかないので、
別の方法をご教授ください。

A 回答 (6件)

> label02 に飛ばすか label01 に飛ばすかは


> CGIの処理結果で決まり、
> hogehoge.cgi コール時には不明なので、
> hogehoge.cgi#label02 とは呼び出せないのです。

あなたのやりたいことがようやく理解できました。

それならば、ラベル名は固定でアンカーの出力位置を動かせばいいのではないでしょうか?

リクエストは
hogehoge.cgi#hoge

として、

'<a name="hoge">'
を表示させたい行の直前に出力するようにすればいいでしょう。
    • good
    • 0
この回答へのお礼

すばらしい!
シンプルな方法がありました。
しかも、新しい知識を必要とせず。
この方法で十分です。
ありがとうございました。

お礼日時:2005/12/14 18:26

じゃあ、ラベル名を#gotoとかにして、飛ばしたい部分に


<a name="goto"></a>
だけ出力するっていうのは?

CGIの処理(サーバ側)でスクロールの初期位置を決定することは、おそらくできません。その動作は、HTMLの処理(クライアント側)によるものなので、URIで#labelを指定してやらないと希望の動作は得られないと思います。
なので、やるとしたら、Locationで飛ばすか、Refreshで飛ばすか、Javascriptで飛ばすか、#gotoで飛ばす行き先の位置を変更するかの、いづれかになると思います。
これで納得いかないなら、よりスマートでない記述をするしかなくなると思います。(少なくとも自分はこれ以外の方法を思いつきません)
    • good
    • 0
この回答へのお礼

クライアント側の処理でしょうが、
その情報(ラベルに飛べ)は
クエリ(URL)からしか指定できないのか?
という問いでした。
残念ながらできないようですね。
ありがとうございました。

お礼日時:2005/12/14 18:19

CGIを二重にしてLocationでとばすとか。


hugahuga.cgiでスクロールさせる位置を判断して(ここでは仮に#label02にスクロールするものとして)
----
if($l == 2){$label = "#label02";}
print "Location: hogehoge.cgi$label\n\n";
----
って感じに、目的のHTMLを表示するCGIに飛ばす。
…とかいう風にしてみてはどうでしょうか?
    • good
    • 0
この回答へのお礼

ありがとうございます。
この方法は検討しました。
…が、CGIはパラメータを付加してコールするので
処理が煩雑になるのと
あまりキレイな流れとは言えないので
他にシンプルな方法が
(わたくしが知らないだけで一般的な方法が)
あるのではないかと思い、
質問させていただきました。

お礼日時:2005/12/14 17:24

読み込むファイルがhtmlだろうがcgiだろうが、ページ内アンカーは指定できます。



http://somewhere.com/hogehoge.cgi#label02

と書けば、label02のアンカーにちゃんと飛びます。

POSTでも、

<form action="hogehoge.cgi#label02" method="POST">

と書けばページ内アンカーが使えます。

携帯のブラウザでもちゃんと機能します(ページ内アンカーに対応していないブラウザがあるかもしれませんが)

この方法だとなぜだめなのか、理由をお願いします。
もしくは、ご自分のなさりたいことを詳しく書いていただけませんか。
(どういう操作をしたときに、どんな挙動をさせたいのか、etc.)

この回答への補足

おっしゃることは知っています。

label02 に飛ばすか label01 に飛ばすかは
CGIの処理結果で決まり、
hogehoge.cgi コール時には不明なので、
hogehoge.cgi#label02 とは呼び出せないのです。
初めから質問に書いているのですが…

こちらの前提条件を否定されても困ります。
わたくしの条件で、解をご教授いただける方のみ
ご投稿ください。
この条件では「不可能」というのも解です。
不可能かどうかわからないので質問しています。

補足日時:2005/12/14 17:20
    • good
    • 0

> cgi の中で、処理によって表示の位置を


> label01, label02, label03 と
> ダイナミックに切り替えたいからです。

というのがイマイチよく理解できないのですが、

"AAAAA"
"BBBBB"
"CCCCC"

という表示が

"AAAAA"
"CCCCC"
"BBBBB"

みたいに移動することがある、ということなら

<a name="label01">
print "AAAAA<BR>";
<a name="label03">
print "CCCCC<BR>";
<a name="label02">
print "BBBBB<BR>";

というようにアンカーごと出力位置を動かせばラベル名を含んだ
URLでスクロールができるのではないでしょうか。

この回答への補足

print '<a name="label01">';
print "AAAAA<BR>";
print '<a name="label02">';
print "BBBBB<BR>";
print '<a name="label03">';
print "CCCCC<BR>";

の間違いでした。ヒアドキュメントにした方が
わかりやすかったか?
AAAA, BBBB, CCCCは1行とは限りません。
これらの表示順を変えたいということではなく、
先頭からではなく、
途中から(スクロールさせて)表示できるか?という
質問です。
言い換えれば、
CGIからの出力でアンカーを指定できるの?
という話です。

print文の内容を hogehoge.htmlとしたら、
hogehoge.html#label02 として
ブラウザで表示されるのと同じにしたいのです。

補足日時:2005/12/14 14:56
    • good
    • 0

JavaScriptでならできるけど、携帯でも必要となると無理です。


CGIで表示させてるんだし、label02を先に表示してはどうですか?

この回答への補足

そういう話ではありません。

補足日時:2005/12/14 15:03
    • good
    • 0

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