- ベストアンサー
htmlからテキストを返すperlを実行する方法
アクセスカウンターの数字画像を出力するperlのcgiを、<img>タグで、 <img src="./counter.cgi"> と、呼び出す方法があると思いますが、これと同じように、画像ではなくテキストを出力するperlのcgiをhtml中に呼び出して、ブラウザに表示する方法はないでしょうか? 以下のような感じかと漠然と思ったのですが、やはり上手くいくはずはありませんでした。 ■cgiプログラム(test.cgi) #!/usr/bin/perl print "Content-type: text/plain\n\n"; print "TEST TEXT"; exit 0; ■htmlファイル <html><head></head> <body> <br> <hr> <object data="./test.cgi" type="text/plain"></object> <hr> </body> </html> perlもhtmlも独学で学んだ基礎レベルだと自分で思っています。 どなたか突破口となるヒントをお願いします。
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
cgi側でjavascriptのコードを返すという方法があります。 ■cgiプログラム(test.cgi) print "Content-type: text/plain\n\n"; print "javascriptのコード"; ■htmlファイル <script type="text/javascript" src="http://サクラ/test.cgi"> テキストニュースも大抵この方式でしょう。 いわいるブログペットも、画像かIFrameかJavascriptで出来ているはずです。
その他の回答 (4)
- zxcv0000
- ベストアンサー率56% (111/196)
後出し条件によって質問の全体像が見え辛くなった気がします。 まとめ直してもらえませんか? 登場サーバーが全部で何台か、それぞれでの 自作 HTML/CGI や SSI の可否は特に重要です。
補足
混乱を生じさせてすみませんでした。 解決はしましたが、どんな全体像だったか記しておきます。 登場するサーバーは3つです。 (a) amebloサーバー 友人がブログを書いているサーバーです。 (b) fc2サーバー ボクがBlogを書いているサーバーです。 ブログテンプレートによりhtmlの編集やcssの編集が可能です。 SSIに関しては設定できません。 (c) サクラインターネットのレンタルサーバー cgiの置き場所です。perlで書いてます。 SSIも使えるようです。 どういうことをやりたかったかと言うと、 (1) 上記(a)から友人ブログのRSSを(c)に設置したcgiで取得。 (2) cgiは取得したRSSをパースなどして最新記事リストをテキストで吐き出す(結果的にこれをjavascriptコードとして吐き出した)。 (3) 上記(b)から(c)のcgiを叩いて、(b)のfc2ブログに(a)の友人Blogの最新記事リストを表示させたい。 最終的には(2)をjavascript形式で吐き出すようにcgiを書き、fc2ブログからそのjavascriptを呼んで、onloadをトリガーとしてinnerHTMLで所定の<div>内にamebloの最新記事を並べることに成功しました。 ブログパーツか何か使えば良かったかもしれませんが、デザイン性とか自由度の高いほうが良かったので、あえて自分で組みたかった次第です。 全体像は以上ですが、分かっていただけたでしょうか? ここに質問してホント助かりました。 ありがとうございました。
- zxcv0000
- ベストアンサー率56% (111/196)
それを実現する事が、Ajax誕生の目的と言っても過言では無い気がしますね。 JavaScript を使う事になりますが、prototype.js の Ajax.Updater() を使えばそれほどムズく無いのでは?
お礼
ありがとうございました。 教えていただいた参考URLで、Ajax.Updater()のサンプルを試してみました。 無事に思い描く動きをしたのでこの手法で実際に組み込んでみたいと思います。 #参考URLのprototype.jsへのリンクが切れていたので、以下からダウンロードしました。 http://prototypejs.org/assets/2008/9/29/prototype-1.6.0.3.js 難点は、javascriptなのでケータイに対応できない点です。 ケータイのブラウザで動的にテキストを出し分けることができる方法ってあるんでしょうか? 何はともあれ、すっきりして嬉しいです。 実際の作り込みは今からですが、ワクワクしてきました。 ありがとうございました。
補足
ん~、回答のお礼を書いた後に、また書きこんでます。 どうやら、Ajax.Updater()で指定するurlは、ドメインから指定できないみたいですね。 HTML自体はfc2サーバーにあり、Ajax.Updater()で指定するurlはボクのサクラインターネットのサーバーにあるので、どうしてもドメインを指定しなくてはいけません。 せっかく上手くいきそうなので、もう少しAjax.Updater()で粘りたいのですが、urlにドメインを指定するよい方法はないでしょうか? #urlのドメインを跨いでAjax.Updater()を使う方法はないでしょうか?
- mtaka2
- ベストアンサー率73% (867/1179)
HTMLの規格上は、「ページ外から取得した文字列をそのまま本文中に埋め込む」方法はありません。どうしてもテキストを埋め込みたいのでしたら、SSI の使用を検討してください。 SSIとは、WWWサーバ側でスクリプトを実行し、その文字列を埋め込んだHTMLファイルを配信するものです。 <!--#exec cgi="./test.cgi" --> といった記述をしておけば、その部分がスクリプトの出力するデータに置き換えられます。 ブラウザからは文字列置き換え後のデータを、普通のHTMLファイルとして受け取りますので、HTMLのタグなども自由に入れられます。 ただし、SSIを使用するためには、WWWサーバ側の設定などが必要ですので、どこでも使えるわけではありません。 くわしくは http://www.tohoho-web.com/wwwssi.htm http://www.scollabo.com/banban/ssi/index.html などをご覧ください。
お礼
ご回答ありがとうございました。 fc2ブログのhtmlテンプレートの中で、動的にテキストを表示したいと考えています。 全体のhtmlの吐き出しはfc2サーバーが行いますので、SSIの設定などはこちらは手が出せないとう事情があります。 ブログのテンプレートに埋め込むという用途が説明不足でした。 すみませんでした。 Googleのアドセンスが動的にテキスト広告を出せているんだから、自分のやりたいことは出来るのではないかと漠然と思っています。 perl、cgiという手段で実現できるかどうかが心配ですが。
- jjon-com
- ベストアンサー率61% (1599/2592)
<object>ではなく <iframe>を使えば上手くいくんじゃないでしょうか。 自分では試していません。
お礼
ご回答ありがとうございました。 最初にカウンターの例を出したのがまずかったかもしれませんが、cgiがはき出す文字列の長さはその都度変わるプログラムにしたいため、スペースが固定されてしまうiframeでは、はき出す文字列が長い場合にスクロールバーが出てしまうでしょうから、デザイン的に採用できない事情があります。
お礼
ありがとうございました。 この方法で上手くいきました。 cgiプログラムは、htmlページ内の所定の<div>の中身をinnerHTMLで書き換えるjavascriptの関数を吐き出すように作って、htmlページがonloadでその関数を呼び出すようにしました。 仰るとおり、Googleのアドセンスやニュースもこんな感じなんでしょうね。 助かりました。 ありがとうございました。