JSから呼ばれた時と直接アクセスの時

このQ&Aのポイント
  • JavaScriptを使用してPHPを埋め込む方法について説明します。
  • JSのsrcに指定したPHPを埋め込んだ場合と、直接PHPにアクセスされた場合の判定方法について教えてください。
  • PHP側で出力する際に、JS形式になるようにしていますが、直接アクセスされた場合にはHTMLタグなどを出力したいです。判定方法を教えてください。
回答を見る
  • ベストアンサー

JSから呼ばれた時と直接アクセスの時

こんにちは、お世話になります。 Javascript(以下js)のsrcにPHPを指定し、HTML内にPHPを埋め込む時、 埋め込まれた場合と直接PHPにアクセスされた場合を判定する方法が判りません。 埋め込む時のソース <script language="JavaScript" type="text/javascript" src="http://example.com/aaa.php?p=1" charset="utf-8"></script> こんな感じですが、cakePHPで書いているので、実際のsrcは http://example.com/aaa/bbb/1 のようになります。 PHP側で出力する時、js形式になるようにしています。 埋め込む時はそのままjsとして実行されますが、 PHPが直接アクセスされた場合は、htmlタグなどが無いため 変な表示になってしまいます。 直接アクセスされた場合はhtmlタグやbodyタグなどを出力させたいのですが、 判定方法はPHPでどのように書いたらよいのでしょうか?

  • PHP
  • 回答数1
  • ありがとう数0

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

そのJavascriptが書いてあるaaa.phpは、実際に出力もさせたいという事でしょうか?それとも、直接アクセスされてしまった場合はhtmlタグやbodyタグを含めて出力させたいということでしょうか? いずれにせよ、basename()などURLから判別させるのが、無難だと思います。 もし、後者だった場合、逆に出力もさせず、aaa.phpの冒頭に if (basename($_SERVER['PHP_SELF']) == 'aaa.php') { exit(); } などで弾いてしまう手もあると思います。

関連するQ&A

  • アクセスカウンターが表示されない

    無料のアクセスカウンターがあるサイトでタグを貼れば使えると書いてあったんですけど、ホームページに下のようなタグを貼ってもうまく表示されません。違うサイトのタグを用いても使えませんでした。何か設定が必要なのでしょうか? 回答よろしくお願いします。 1つ目のサイトのタグ <script type="text/javascript">design=1527;</script> <scripttype="text/javascript"src="http://counter2.yaboo.jp/c.js"></script> 2つ目のサイトのタグ <script type="text/javascript"> ITGCntImage=169; ITGCntFigure=8; ITGCntReload=1; </script> <script type="text/javascript" src="http://cnt1.itgear.jp/c.js"></script>

  • PHP内でjsファイルの関数は使えないのでしょうか

    こんばんは、Webページ制作の勉強で問題にぶつかり、少々お知恵をお借りしたく質問させて頂きました。 あるPHPファイルの中の <!doctype html> <html> //ここにHTMLの記述があるとします。 </html> のHTMLの記述の中に <script src="example_A.js"></script> <script src="example_B.js"></script> のような形で他のページでも使っているJavascriptのファイルを読み込んで使用しようとしたのですが、一部の処理だけが行われないようのです。 そこでjsファイルの中で使えない記述に共通点が無いか確認してみたところ、 $(function() {   //ここに処理 }); のように、関数のみが動作して居ない事が解りました。 そこで質問なのですが、PHPファイルの中では、<html>の中で記述されたスクリプトだとしても関数の中で記述された処理は使えないという事なのでしょうか? また、もしPHPの中でも関数を動作させる方法があれば、教えて頂けないでしょうか。 宜しくお願い致します。

    • 締切済み
    • PHP
  • 外部 js ファイルの動的読み込み

    通常、HTML で外部の Javascript ファイルを読み込む必要がある場合、 <script type="text/javascript" src="****.js"></script> としますが、これを Javascript のコード内で行いたい場合、何か方法はあるでしょうか? いわゆる、Perl での use や php での require のようなことを Javascript で実現したい - 動的に js ファイルを読み込みたいのです。 以上、お分かりになる方、よろしくお願いします。

  • Javascriptのクエリ(パラメータ)取得

    Javascriptでクエリが取得できません。 現在、行おうとしていることは <html> <body> ~ <script src="http://www.hoge.jp/example.js?id=1"></script> ~ </body> </html> のidの値をexample.jsでクエリ取得し、example.js内でidを用いた計算を 行おうと思っています。 調べたところ、http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=47607&forum=28&4 のような情報はありましたが、scriptタグの事前にファイルを読み込ませると言った方法でした。 直接jsファイル内でクエリが読み込める方法がありましたら教えてくれませんか?

  • *.js ファイルの読み込みについて

    お世話になります。 *.jsファイルを読み込むのに <script type='text/javascript' src='abc.js'></script> とすれば、できます。 これを、 <script type="text/JavaScript"> <!-- src='abc.js; ・・・・・・・・・ ここにabc.js内の関数などを記載 ・・・・・・・・・ //--> </script> と、いう形にできないものでしょうか。 このままだと、abc.jsは読み込まれません。 よろしくお願いします。

  • shadowbox.jsについて

    shadowbox.jsとslimbox.jsを併用したいと考えています。 もともとshadowbox.jsをPrototypeで使用し、HTMLを呼び出すのに使用していたのですが、 画像のライトボックス表示にslimbox.js(jquery使用)を使いたいと思い、 両方とも記述したらshadowboxの方が正常に動作しなくなりました。 何か解決策はありますでしょうか。 非常に困っています。お願いします。 ちなみに以下の様なコードをhead内に記述しております。 <script src="../../common/js/prototype.js" type="text/javascript"></script> <link rel="stylesheet" type="text/css" href="../../common/js/shadowbox/shadowbox.css"> <script src="../../common/js/shadowbox/shadowbox.js" type="text/javascript"></script> <script type="text/javascript">Shadowbox.init();</script> <link rel="stylesheet" type="text/css" href="shadowbox.css"> <script type="text/javascript" src="shadowbox.js"></script> <script type="text/javascript">Shadowbox.init();</script> </script> <link href="../../common/css/slimbox/slimbox.css" type="text/css" rel="stylesheet" media="screen" /> <script type="text/javascript" src="../../common/js/jquery.js"></script> <script type="text/javascript" src="../../common/js/slimbox.js"></script> <script type="text/javascript"> //slimbox $(document).ready(function() { $('a[rel*=lightbox]').slimbox(); }); </script>

    • ベストアンサー
    • CSS
  • “show_ads.js”って、何のスクリプト?

    素朴な疑問。 何のためのスクリプトでしょうか? <script type="text/javascript" src="http://pagead2.googlesyndication.com/*****/show_ads.js"> </script>

  • 外部 .js で

    index.html 内の head タグ間に <script type="text/javascript" src="./js/test2.js"></script> また、index.html と同階層にある js ディレクトリの内の test2.js の内容は document.write("test") だけです。 この条件で(というのは、最終的に別にテキストを出したいだけというわけではないので)、body の任意の場所に test を表示 [記述] させる方法を教えてください。 body の適当な場所に <script type="text/javascript"></script> と書いても、何も現れません(ソースで確かめています)。根本的におかしいのかもしれませんが、わかりません。 必ず、これら条件でお願いします。

  • cgiをjsで。

    apeboard+を設置したとします。 http://www.2apes.com/ それを ブログに組み込むとしたら普通 インラインフレームですよね。 ですが、これをblogパーツのように <script language="JavaScript" type="text/javascript" src="http://***********/****.js" charset="Shift-JIS"></script> みたいにして、表示させる事は可能なんでしょうか?

  • 外部javascriptの重複を防ぐには

    簡単なタグを貼り付けるだけで使えるブログパーツを、javascriptで作ろうとしています。 <■コード(1)> <script type="text/javascript" src="http://ex.com/js/test.js"></script> <div> <img class="imgobj" src="http://ex.com/dm.gif" width=1 height=1/> </div> 上記のように外部JSを読み、そのJSの中でimgタグのonloadイベントを記述し、そのイベントの処理でimgタグの直前にテキストを書き出すようにしています。これはidなどを意識しなくてもタグを貼りつけた場所に出力されるようにするための措置です。 上記は単独で貼り付ける場合はうまくいったのですが、同じコードを複數貼り付けると外部JSの衝突でエラーになります。よって外部JSの読み込みを動的にしてみました。 <■コード(2)> <script type="text/javascript"> var obj=""; obj = document.getElementById("example_tag"); if( !obj ){ var ele = document.createElement("script"); ele.id = "amacusplus_scriptfile"; ele.type = "text/javascript"; ele.src = "http://ex.com/test.js"; document.body.appendChild(ele); } </script> <div> <img class="imgobj" src="http://ex.com/dm.gif" width=1 height=1/> </div> このソースを同じページ内で二箇所貼り付けると、 今度は動的な外部JSの読み込みとimgタグのonload処理の発生タイミングが微妙なため挙動不審になってしまいました。成功したり失敗したり・・・。 とこのような状況で煮詰まっています。 質問は (1)外部JSの動的な読み込みの後に、明示的にimgのonloadイベントを起こすことはできないか? がメインですが、他のアプローチで解決できればそれでもいいので (2)<script>~</script>内に書いたjavascript内で、現在位置を知る方法(scriptエレメントを知る方法) (3)複数回読まれても重複を起こさない外部JSやその読み込み方法の書き方 などなにかヒントになるようなことを教えて頂きたいのです。 よろしくお願いします。