• 締切済み

javascriptの質問です

今、持っているサイトのいくつかの特定のページでリダイレクトをかけたいと思っています。 ただ、全て同じテンプレートなので、特定のページにのみリダイレクトのソースを埋め込むことが出来ません。その中で特定のものだけをリダイレクトさせたいと思っています。 例えば、 a.html→e.htmlにリダイレクトさせたい b.html→リダイレクトさせない c.html→e.htmlにリダイレクトさせたい d.html→リダイレクトとさせない といったものなのですが、ソースコードは全て同じになっています。 そのためのプログラムをどのように作ったら良いのか分りません。 恐らく、javascriptで作るのではないかと思っているのですが・・・

みんなの回答

  • zapsoft
  • ベストアンサー率77% (7/9)
回答No.3

う・・・大変申し訳ないです。 ASPはアプリケーションプロバイダでアクティブサービスページですね^^; それであればヘッダ部分に以下を記述してください <script> var strFullFileName = window.location.href; var strFileName =strFullFileName.substring(path.lastIndexOf('/',path.length)+1,path.length); if(strFullFileName=='a.html'){location.href='e.html';} if(strFullFileName=='c.html'){location.href='e.html';} //~~~もしその他あるのであれば全て同じ方法で記述~~~ </script> 以上です。 ASPを言語のASPと勘違いしてしまいました。大変申し訳ないです^^; ASP(アプリケーションサービスプロバイダ)であれば確かにクライアント側しかいじってはいけないですね。混乱させてしまいすみませんでした~^^

you_0225
質問者

お礼

ご回答ありがとうございます。 こちらこそ、分りづらいご説明で申し訳ありませんでした。 早速、教えていただいたスクリプトを埋め込み、動作も問題なくしていることを確認できました。 大変丁寧なご対応、ありがとうございました!

  • zapsoft
  • ベストアンサー率77% (7/9)
回答No.2

ASPですか・・・w 奇遇にも私の専門分野です^^; ASP1.0の頃からずっとやってきました。ちなみにASPのショッピングサイトは実運用してますw(最近は開発はやってない&ASP.NETはやっていませんが。) まず、ショッピングサイトの構築であるというお話ですので、開発上での基本ルールが前提としてJSでなければいけないという場合(たぶんないはず。通常であれば百害あって一利なしなので・・・)であれば別ですが、基本的にはリダイレクトをかけるのであればサーバー側で条件分岐するページをつくるべきです。JSで記述するのは基本的にはクライアントに一度DLさせなければいけないため、無用な通信が発生するために遅くなります。また、遷移先のページで戻るボタンを押下(お仕事でやられているようなので専門用語でw)した場合に遷移用のページが起動してしまう為にまた次のページに遷移してしまいます。上記理由から自動で移動する場合にはリダイレクト用のASP(HTMLなし)を作成するべきです。 例えば、 >a.html→e.htmlにリダイレクトさせたい の場合で説明します。 Aの遷移もとがZだとしてリダイレクトページをYをつくるとして一番美しいと思える方法は、下記方法です。 z.asp→引数e(仮に引数名は「seni」)を渡す→y.asp→サーバー側でリダイレクト→e.asp この場合のy.aspのソースは下記のようになります y.asp ------------------ <% select case Request("seni") case "e" Server.Redirect("e.asp") .....略 end select %> この方法をとった場合にはサーバーの環境引数を使用しないで遷移できるのでファイル名に「あまり」依存しないコードを記述することが可能です。あとは質問者様があげられた4パターンの全てをこのソースコードに埋め込むことができますので、ファイルの遷移先をきめる関数ページのような使用方法ができますので便利です。 で、実は上記方法までは質問者様は理解していてこの質問をされているという前提で次にいきましょう 次の方法は、質問者様がそのまま考えている方法で遷移します。 z.asp→a.asp→y.asp→サーバー側でリダイレクト→e.asp ただしこの場合の条件として二通りの方法が考えられます case1.前画面により条件が分岐 case2.当画面がa.aspである場合には無作為にy.aspに遷移 ただ、この場合にはcase2の方法はありえないかな・・・と考えています。無条件に遷移するのであればa.aspの存在が必要ないからです(実は必要あるようなケースも想定していますのでもうすこしお待ち下さいw) 一応両方のcaseの例を示します。 case1 a.asp ----------------------- <% 'Request.ServerVariables("HTTP_REFERER")←これで前画面のURL文字列を取得します。 If InStr(Request.ServerVariables("HTTP_REFERER"),"z.asp") <> 0 Then 'たしかファイル名以外にも引数等がはいるのでInStrで評価する(本来はUCASEで大文字にして比較する必要あり。) Response.Redirect("e.asp") End If %> case2 Request.ServerVariables("HTTP_REFERER")をRequest.ServerVariables("LOCAL_ADDR")に変更してa.aspが含まれている場合でチェック(たしかその画面の情報を取得する場合には「LOCAL_ADDR」だったとおもいます・・・) 以上です。 また画面がテーブル構造(フレームではないですよね?)でどこにいれたらいいかわからないとのことですのでこの場合には一番a.aspの先頭に組み込みます。Redirectはhtmlの出力を一度でも行ってしまうとサーバー上でそのまま遷移ができなくなってしまうからです(当然といえば当然ですね(笑)) では最後にJSでの実装方法といきましょう。 この方法は前述した通りそのまま素通りして遷移するのであればUI上あってはいけない方法ですが、たとえばa.aspで画面を表示したのちにクライアント側がボタンを押下した。などというアクションにより遷移する場合には必要となります。 この場合にはボタンを押下したものとしてサンプルを記述します。(コンテンツ部分にはJSを含めてはいけないとのことですのでに分割します。) a.asp(コンテンツ)(手をつけてはいけないとのことですがなんらかのJSを呼び出しているという想定で記述します。その想定JS関数名をseniとしてここでは記述します。) ----------------------- ~~~~なんらかの文字列 <input type="button" onclick="javascript:seni();"> ~~~~なんらかの文字列 x.asp(ヘッダ)(クライアントのJSでa.asp表示時のみ以下を出力しておきます。) ----------------------- <script> strRedirectPage = "e.asp"; </script> x.asp(ヘッダ、もしくはフッタ。seni()に相当する関数がおいてある場所。)(クライアントのJSで以下を出力しておきます。) ----------------------- <script> seni(){ if(strRedirectPage=="e.asp"){ Location.href="e.asp"; }  ~~~元々あった処理~~~ } </script> 上記方法によりコンテンツ部分にはJSを使用している前提ですがJSによる実装は可能です。 逆に言うとa.asp上でそのまま<a href="?.asp">などと記述されている場合にはコンテンツに手を入れなければ実装は不可能です。 と、ながくなりましたがこんな感じですかね。 まとめると、サーバーによるRedirectが可能であれば全ての画面遷移を1ASPにまとめないとメンテナンスが大変ですので遷移用ASPを常に通った後に画面遷移を通るべきだと思います。 現実的にはいまさら手を加えられないといった問題などもあるので常にヘッダーの中にincludeする方法をとると良いでしょう。これであれば一行の追加ですみますので。 以上、いずれか適した方法で実装してみてください。 最後になりましたがここまで全てノリで一気に書いたソースですので記述ミスはご容赦くださいw それではご検討を祈ります。でわ。

  • zapsoft
  • ベストアンサー率77% (7/9)
回答No.1

ええっとですね・・・お答えする前にまず確認から。 まずテンプレートが同じという点についての質問です。 テンプレートが同じというのは、元になっているファイルが同じだけであってその中で表示されている文字は別物ですよね?(例がhhtmlファイル名が異なることから想定)別物である場合であればその中に別々に単純にjavascriptを埋め扱くことで実行は可能です。 ただ、少し気になっているのはおっしゃっているテンプレートが、例えばblogなどであるテンプレートを指す場合であるのであればこれを実行するのは不可能です。なぜなら通常のblogなどではjavascriptなどは記述できないと思われるからです。 要するにそれぞれのページが複数のhtmlファイルであり、JSを実行できる環境であれば可能であり(※多少JSを勉強すればまるっきり同じJSでを複数HTMLに埋め込んだ場合でも分岐すればいいだけなので可能ですが例が複数ファイルですので割愛します。)、blogやwikiのようにデータを入力すればWEB画面が表示されるようなものについては不可能と言うことです。(ご自身でblogのシステム自体を構築できるようであれば別ですが・・・) 以上です。 ケースによって具体的な回答が変わってきますのでまず環境のご報告をお願いいたします。

you_0225
質問者

補足

分りづらい質問内容で申し訳ございません。。 もう少し詳細な状況をご報告申し上げます。 テンプレートを使っているのはASPのショッピングサービスです。 ページはテーブルでヘッダー・コンテンツ・フッターに分けられており、 ヘッダー・フッターのみHTMLによるカスタマイズが可能で、全ページに適用されます。 コンテンツ部分は登録した商品情報が反映され、それ以外のカスタマイズは不可能です。 ですので、仰るとおり、分岐すれば出来るような気はするのですが。。 ご回答の程、何卒よろしくお願いいたします!

関連するQ&A