- ベストアンサー
HTMLによるデータ送信
HTML内に設置したバナーをクリックした時に、別サーバの カウンタープログラムによってカウントしたいのですが。 カウンター設置のページをユーザー側に表示させない 方法が解かりません。 送信方法はシンプルな方法が有れば越した事は有りませんが、 現在formをsubmitする方法で調べていたのですが、actionにURLを 指定すると、ページが表示されてしまいます。 Onclick なども駄目でした。 HTMLの仕様上複雑になるや不可能でしたら、 JavaScriptの方でもかまいません、なるべくシンプルな 方法で教えていただけませんでしょうか?
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
リフレッシュページ(Metaタグのrefresh)によるページ転送では、仰るとおり戻るボタンで元のページに戻りませんが、 HttpのLocation(リダイレクト)を使えば、戻るで、元のページに戻ります。 phpでは、headerを使い、 <?php header("Location: http://www.yahoo.co.jp/") ?> で、リダイレクトされます。 実際には、以下のようなレスポンスが、サーバーから返り、 クライアントは、Locationで指定されたページへ遷移します。 HTTP/1.1 302 Found Date: Tue, 24 Apr 2007 04:14:26 GMT Location: http://www.yahoo.co.jp/ Content-Length: 0 Connection: close Content-Type: text/html; charset=UTF-8
その他の回答 (4)
- nidoking
- ベストアンサー率69% (18/26)
バーナーをクリックした時の動作について、もう少し詳細に教えてください。 今までの説明から、バーナーをクリックしても、何も動作しないように見せておき、 実際は、カウンタサーバのCGIをリクエストし、クリックカウンタを集計する。と理解していたのですが。 この場合は、画面の書き換えを起こさせないためには、xmlHTTPRequestを利用するか、imageオブジェクトなどの利用となります。ただし、xmlHTTPRequestは、セキュリティの制約から、異なるサイトへつなぐことはできません。 バーナークリックで、目的画面(バーナーの)へ画面遷移してよいのであれば、 バーナークリックのリンク先をカウンタサーバへしておき、カウンタサーバから目的の画面へリダイレクトするというのが一般的です。 リダイレクト先URLは、バーナーのリンクから,パラメータで渡すことで、カウンターサーバのcgiを汎用化できます。 バーナーの例 <a href='http://counter.xx.co.jp/count.cgi?url=www.mokuteki.site.co.jp'> <img src='イメージ.gif> </a>
補足
返事が遅くなり、申し訳ありませんでした。 >目的の画面へリダイレクト 私の説明不足で複数解を用意して頂き 大変申し訳ありません下記の様な流れです。 ●バナーをクリックした時の、処理の流れ。 サーバA内「Aバナー」→サーバC内「ホームページC」 ↓ サーバB、{カウンタページB」 プログラムの設置出来るのは、AとBのサーバだけで、 Aサーバ内は、出来るだけシンプルな形のタグのみ(Javascript可)、 Bサーバ内の処理は自由で制限無し、Cサーバ何も手を加えない。 ●問題点。 上記の処理では、戻るボタンなどで目的地である別のページ から最初のページへは、一方通行になり、戻る事が出来なく なりますよね? お詫び 後から、条件をつけたす様な形になりすみません。 >パラメータで渡すことで、カウンターサーバのcgiを汎用化 大変貴重な情報でした、度重ねて感謝いたします。 ●追記(この場をお借りして申し訳ありません。) 最初は、HTMLで出来るだろうと、楽観的に考えておりました。 この、処理を実現するためHTMLやJavascriptの勉強を始めたり 右往左往していて、未だ解決できておりません。 今後のために、色々な条件での処理やこんなのもあったよ 言った経験をお持ちの方や幅広く回答して下さる方の回答 も同時に、希望いたします。
- nidoking
- ベストアンサー率69% (18/26)
カウンターのcgiをtcount.plとすると、 以下のようなHtmlを挿入することで、 バーナー(a.gif)をクリックしたときに、 tcount.plを呼び出す(GET Method)することができます。 この場合、Imageオブジェクトの機能を使っているので、 cgiは、イメージ(gifなど)を返さなくてはなりません。 ---HTMLのサンプル----- <img src="icons/a.gif" onClick="img= new Image(2,2);img.src=('cgi-bin/tcount.pl')"> ---CGIのサンプル(perl)-------- #!/usr/bin/perl ここにカウンター処理を入れる ここからは、2×2PXのgifイメージの出力です。 print "content-type: image/gif\n"; print "\n"; print pack("C*",(0x42,0x4D,0x46,0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x36,0x00,0x00,0x00,0x28,0x00, 0x00,0x00,0x02,0x00,0x00,0x00,0x02,0x00,0x00,0x00,0x01,0x00,0x18,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xC4,0x0E,0x00,0x00,0xC4,0x0E,0x00,0x00,0x00,0x00, 0x00,0x00,0x00,0x00,0x00,0x00,0xE6,0xE6,0xFF,0xD9,0xD9,0xFF,0xFF,0xFF,0xED,0xED, 0xFF,0xE6,0xE6,0xFF,0xFF,0xFF)); 以上
補足
コードまで書いていただいて有難うございます。 HTMLは、タグ打ちした事が無いので殆ど理解できてません。 PHPは、少し解かるのですが、、、。 perlの事も、全然解からないのですが。 >Imageオブジェクトの機能 イメージをオブジエクトとして呼び出す理由は、やはりHTMLの 仕様で外部サーバにページを移項せず、データを直接データを 渡すのが出来ない仕様なのでしょうか? ■今回のシステム図 不特定多数のサイト上バナー → バナーのクリック先サイト ↓ ↓ ※ここから下は、閲覧者に処理を見せない様にしたい。 ↓ 外部のサーバー(PHPカウンター) ※ここから下は、完成済み ↓ データベース ■教えて頂いた処理で、実行上記の処理が出来ますでしょうか? ■単に外部サーバから、イメージを返せばそのファイル上のスク リプトもついでに実行されると言うことですか? perlの知識が無いので少し解かるPHPで試しておりますが、 まだうまく行っておりません。 この様な処理に必要な知識は、HTMLのimg 要素利用と言うこと でしょうか? もし、質問が解かりずらかったらしたら申し訳けありません。 どの技術の知識が必要なのかすら解からない状態でして、 何度もお手数かけますが、よろしければ、教えて頂け無い でしょうか?
- nidoking
- ベストアンサー率69% (18/26)
scriptを使ってしまいますが・・・ imageオブジェクトを使って、クリックしたときに、イメージをロード このときに、カウンタcgiを呼ぶ。 カウンタcgiでは、ダミーのgifイメージを返す。 といったのではだめでしょうか? onClickのファンクションで、 img = new Image(16,16); img.src = "http://カウンタcgi";
お礼
有難うございます。 HTMLはGUI型ソフトで作成しており、殆どタグを知りません。 >gifイメージを返す なぜ、そうする必要が在るのか等すら解かっておりません。 ただ今、javascript等を、調べておりますが。 時間が、掛かりそうなので、一旦お礼まで。
- nidoking
- ベストアンサー率69% (18/26)
バーナーをクリックしたときに、カウンタ用のCGIなどを呼び出し、画面自身はそのままの表示としたい ということでよろしいでしょうか? ということであれば、Frame および、Framesetを使うというのはいかがでしょうか? カウンタ用のurlを表示するための非表示のFrameを用意する。 STYLESHEETのdisplayをnoneにしておくことで、非表示とすることができます。 最下部など目立たないところに配置すればよいと思います。 バーナーのリンクで、targetをこの非表示のFrameとする。 これでスクリプトを使わず、一見画面は変わらないが、ちゃんとCGIを実行してくれると思います。
補足
早速のお答え、有難うございます。 当方の説明不足で申し訳有りませんでした。 カウンターを設置するページは自己所有で無い不特定多数の ページにタグを貼り利用頂くため、なるべくシンプルなタグを 貼って頂くような、方式でと考えております。 例えば、訪問者にページを見せる意味を持たないアクセス解析等 のプログラムでは、どのように処理しているのでしょうか。 出来れば2~3行のタグを貼ってもらい、相手のサイトの構造に 依存しない、方法は無いでしょうか? 勿論フレーム等も、非表示の設定なので、相手のサイトに影響を 与えないのかもしれませんが。 お答えには、感謝しております。 どうぞ、今後も宜しくお願いいたします。
お礼
返事おそくなり、大変申し訳ありませんでした。 >HttpのLocation(リダイレクト)を使えば、戻るで、 元のページに戻ります。 そうやって、最初のページに戻すのですね、有難うございます。 問題の部分は、別件に追われてしまい未だ作成できてませんが、 今回の、ご回答いただいたLocation(リダイレクト)で、解決できそうです。 ここまで、おうかがいできれば完成させる事ができると思います。 後は、実践だけなのですが少し時間が空きそうなので締め切ります。 完成のご報告が出来ないのが残念ですが、 また、機会があればよろしくお願いいたします。 有難うございました。