• 締切済み

Google検索結果で右側のみヒット

Googleで検索を行うと、フレームの右側のみヒットして、左がは表示されまん 検索を行ったときに、フレームの左側と右側が表示されるようにしたい。過去の質問(http://oshiete1.goo.ne.jp/kotaeru.php3?q=728684)で解決すると思うのですが、この場合、検索した時に、右側の情報がほしい時は右側と左側と言うように表示されるのでしょうか。それとも本当のトップページが表示されるのでしょうか。 検索したときに、左側と右側の検索した結果が表示されるようにしたいのですが

みんなの回答

noname#199778
noname#199778
回答No.5

私は独自ドメインのサーバスペースを持っていないので実験できないのですが、先に上げた参考URLの二つ目のページにおいて、独自ドメインを持っているケースでサイト全体でcookieを共有したい場合は、cookieに設定するpathを"/"として設定するように解説されています。 ですので、これをそのまま踏襲してみてはいかがでしょうか? <script type="text/javascript"><!-- if(top==self){ rootdir="/"; //パス設定値 bisket="conURI="+escape(location.href)+"; path="+rootdir+";"; document.cookie=bisket; location.replace("../index.htm") } //--></script> こちらのソースで動作するかどうか試してみると良いと思います。 うまくいかなかったら、ごめんなさい。

参考URL:
http://user.ecc.u-tokyo.ac.jp/~t10521/ecmascript/tutorial/cookie.html
m-happy-t
質問者

お礼

いろいろ、ありがとうございました。 少し勉強して、挑戦してみます。もしかして、私の利用しているサーバーの問題かもわかりませんね。 20Pだしたいのですが、これを参考にする方に迷惑がかかるといけないので、10Pにさせていただきます。

noname#199778
noname#199778
回答No.4

うまくいかない原因が判りました。 私がこれまでに上げていたスクリプトは、すべての関連ファイルが同じディレクトリ内にあるケースを想定していました。 補足を見ましたが、今回のケースでは、コンテンツが別ディレクトリに収められていて、フレームセットをするファイルがコンテンツのファイルよりも上位のディレクトリにあるので、cookieのパスが通らないために、フレームセットするページにcookie情報が渡っていなかったようです。 cookieにpath情報を付加すれば、フレームセットするページにcookie情報を渡せるようになると思います。 各コンテンツのスクリプトを以下のように変えてみてください。 <script type="text/javascript"><!-- if(top==self){ rootdir="/hoge"; //パス設定値 bisket="conURI="+escape(location.href)+"; path="+rootdir+";"; document.cookie=bisket; location.replace("../index.htm") } //--></script> こちらで、pathをcookieに渡すように修正してあります。 「rootdir="/hoge";」のhogeの部分には、フレームセットするページがあるディレクトリのパスを入れて下さい。 例えば、index.htmのURIが「http://www.hoge.ne.jp/~lead1976/index.htm」であるとしたら、rootdirの値は「rootdir="/~lead1976";」のように設定します。 cookieの扱いについては、参考URLなどが詳しいと思います。 よろしければ、そちらも参照してみてください。 pathの設定の仕方など、参考になると思います。 おそらくこれで解決できると思うのですが…

参考URL:
http://tohoho.wakusei.ne.jp/wwwcook.htm,http://user.ecc.u-tokyo.ac.jp/~t10521/ecmascript/tutorial/cookie.html
m-happy-t
質問者

補足

誠に申し訳ございません >rootdir="/hoge"; //パス設定値 index.htmのディレクトリがありません。 下記の状態ですが、どのようにするのでしょうか http://www.hoge.ne.jp/index.htm フルパスを記載しましたが、404エラーでした。

noname#199778
noname#199778
回答No.3

たびたび失礼します。 まず始めに一つソースの訂正を…具体的な動作には支障は無いはずですが、cookieを破棄する部分の記述に一ヶ所ミスがありました。 フレームを切るファイル内のスクリプトの方ですが、 <script type="text/javascript"><!-- function rep(){ getc=document.cookie; if (getc.match("conURI")){ ckdatum=getc.split(";"); for (i=0; i<ckdatum.length; i++){ if (ckdatum[i].match("conURI")){ chURI=ckdatum[i].split("="); chURI[1]=unescape(chURI[1]) frames[1].location.replace(chURI[1]); bisket="conURI=del; expires=Sun, 20-Dec-2003 23:59:59 GMT"; document.cookie=bisket; } } } } window.onload=rep; //--></script> 以上のように訂正します。 訂正箇所は、「bisket="conURI=del; expires=Sun, 20-Dec-2003 23:59:59 GMT";」の部分で、前はURI=delと書いていたんですが、正しくはconURI=delとする必要がありました。 ただ、こちらの修正点は、先に書いたように、トップページの表示内容から元々飛んできた前のURIにフレーム内のページを切り替える処理には影響しないはずです。 で、補足読みましたが、コンテンツがダイレクトに開かれた時に本来のトップページに移動するだけで動作が止まってしまうのであれば、ブラウザないしセキュリティソフトがcookieの保存を許可していない可能性が思い当たります。 ブラウザやセキュリティソフトの設定を見直してみて、cookieを許容するように設定して、動作を確認してみてください。 ブラウザ側の設定については、IEであればインターネットオプションのプライバシータブの中でcookieを許容するかどうかを設定できます。 Netscapeであれば、設定のプライバシーとセキュリティの項目内のCookieの項で設定できるはずです。 もしこれで動かないとしたら、ちょっと原因がつかみきれません。 一応、こちらでは動作確認をして、正常に動くことを確認してあるのですが… JavaScriptのエラーメッセージなどは出ているでしょうか? もしそれが出ていれば、その情報を補足してみて下さい。 たびたび失礼しました。

m-happy-t
質問者

補足

たびたび、すみません。 3台のパソコンで試したのですが、どれもトップページに飛びます(家2台、外部1台) 動作確認を取っていただいているので、この状態で全部書き換えたいと思います。そこで、動作確認をとる時に、クッキー・履歴の削除をして確認すれば良いのですか。 エラー表示は何も出ていません。 現在の状態は下記のように書き込みました。これでよいのでしょうか。 フレーム分割はindex.htm フレーム右側は名称.htm(複数) フレーム左側はleft.shtml(固定) index.htmに下記を記入 <script type="text/javascript"><!-- function rep(){ getc=document.cookie; if (getc.match("conURI")){ ckdatum=getc.split(";"); for (i=0; i<ckdatum.length; i++){ if (ckdatum[i].match("conURI")){ chURI=ckdatum[i].split("="); chURI[1]=unescape(chURI[1]) frames[1].location.replace(chURI[1]); bisket="conURI=del; expires=Sun, 20-Dec-2003 23:59:59 GMT"; document.cookie=bisket; } } } } window.onload=rep; //--></script> 名称.htm <script type="text/javascript"><!-- if(top==self){ bisket="conURI="+escape(location.href); document.cookie=bisket; location.replace("アドレス/index.htm") } //--></script>

noname#199778
noname#199778
回答No.2

補足読みました。 はじめの方のスクリプトは、コンテンツの各ページ内に入れてください。 head内でもbody内でもかまいません。 フレームを切るHTMLファイルのURIは、index.htmlでフレームを切っているのであれば、index.htmlで良いです。 そのメニューとコンテンツを表示させるフレームを作る<frameset>タグが記述してあるファイルを指定してください。 後者のフレームセット側のスクリプトについてですが、 このスクリプトは、コンテンツがフレーム外で直接参照された時に、cookieにそのコンテンツのURIを保存して、フレームをセットするHTMLファイルに飛ぶようにしてあることを受けて、動作するようにしたものです。 コンテンツがフレーム外で参照された時には、上に書いたようにcookieにその参照されたページのURIが保存されていますので、この情報があるときには、右側のフレーム(2番目の<frame>要素)に表示するページを、もとのsrc属性で指定されているページではなく、cookieに保存されているページに置き換えるという動作になります。 また、動作後にcookieをリセット(正しくは削除でした)をするようにしてあるのは、また改めてこのフレームを切るHTMLファイルを呼び出した時(topに戻るリンクなどで)に、先に飛んできたコンテンツのページが初期状態で表示されるのを防ぐためです。 なお、念のため、cookieというのは、簡単に言えば、ブラウザがローカルのパソコンの中に保存するデータのことです。 frames[1]という指定方法についてですが、JavaScriptではframe要素はframesという配列として取得・管理されます。 frames[1]という指定は、HTML内に記述されたframeタグを前から順番に拾ったとして、0から始まる連番の1、つまりは始めから2番目のframe要素を特定しているということになります。 この場合はフレームを左右2つに分けると仮定して、右側に表示されるフレームは、通常frame要素を記述していくと、先に書いたframeタグの方が上ないし左側に来ますから、右側に当たるframeは2番目に書かれたframeタグのフレームになるので、frames[1]と指定しています。 もしフレームが三つ以上あった場合は、狙ったフレームとは違うフレームを指定している可能性が残ります。 例えば、上に一つフレームがあり、下側が左右の二つに分かれているページを作った場合は、frames[1]は二番目に書かれているframeタグのフレームですから、下側の左にあるフレームがframe[1]に当たります。 この場合で、下の右側のフレームを指定したいときは、そのframeは前から3番目に書かれたframeタグのものになりますから、前述のソースでframes[1]となっている部分を、frames[2]と書き直す必要がありますね。 乱文になりましたが、こんな説明ではいかがでしょうか… 判り難かったら、申し訳ありませんが、再度補足をお願いします。 ただ、これからちょっと用があるので、返答は遅くなるかもしれませんが…

m-happy-t
質問者

補足

申し訳ございませんが、もう少しご指導お願いします<script type="text/javascript"><!-- function rep(){ getc=document.cookie; if (getc.match("conURI")){ ckdatum=getc.split(";"); for (i=0; i<ckdatum.length; i++){ if (ckdatum[i].match("conURI")){ chURI=ckdatum[i].split("="); chURI[1]=unescape(chURI[1]) frames[1].location.replace(chURI[1]); bisket="URI=del; expires=Sun, 20-Dec-2003 23:59:59 GMT"; document.cookie=bisket; } } } } window.onload=rep; //--></script> 上記のjavascriptをindexにそのまま書きましたが、本当のTOPページに飛びました。 上記のjavascriptはこのまま使用していいのですか。直すところがあるのでしょうか。 右側のコンテンツがたくさんありますが、各右側のコンテンツには、script type="text/javascript">から</script>までを書きました。

noname#199778
noname#199778
回答No.1

ご質問の、過去の質問の例については、トップページに飛ばすだけで、検索に引っかかった各コンテンツの内容をダイレクトに表示させる事はできません。 もし、検索にコンテンツのみが引っかかった時に、そこから入られてもフレーム付きで表示させ、また検索されたコンテンツも表示させた状態にしておくのであれば、もう少し仕掛けをしておく必要があります。 コンテンツにダイレクトに飛んでこられた時に、フレームページに飛ばしてやり、なおかつそのコンテンツを表示させておくのであれば、以下のようなソースではいかがでしょう。 各コンテンツのページには、下のソースを組み込んでおきます。 これは、フレームを切るファイルとの階層が一致している限りは、外部JSファイル化して取り込ませるのでも良いでしょう。 <script type="text/javascript"><!-- if(top==self){ bisket="conURI="+escape(location.href); document.cookie=bisket; location.replace("フレームを切るHTMLのURI") } //--></script> これは、過去の質問のスクリプトに手を加えて、もしフレームに表示されていなければ、現在のURIをcookieに保存してから、このページをフレームを切るHTMLファイルに置き換えます。 location.replace()を使っていますので、バックボタンで戻られた時には、速やかに前のページに移動できます。 検索エンジンからきた人は、検索結果のページにダイレクトに戻れることになるはずです。 次に、フレームを切るファイルのhead内に、以下のスクリプトを組み込みます。 <script type="text/javascript"><!-- function rep(){ getc=document.cookie; if (getc.match("conURI")){ ckdatum=getc.split(";"); for (i=0; i<ckdatum.length; i++){ if (ckdatum[i].match("conURI")){ chURI=ckdatum[i].split("="); chURI[1]=unescape(chURI[1]) frames[1].location.replace(chURI[1]); bisket="URI=del; expires=Sun, 20-Dec-2003 23:59:59 GMT"; document.cookie=bisket; } } } } window.onload=rep; //--></script> こちらは、フレームを切るファイルがロードされたときに、cookieに保存された情報が無いかを検索し、そこにコンテンツページで保存したcookie情報(URI)があれば、そのURIを二つ目のフレームのURIと置き換えて表示させるという動作になります。 また、このとき、cookie情報をリセットするようにもなっています。 右側のフレームということですので、フレームの指定を「frames[1].location...」としましたが、フレームが他にもある場合にはこの番号をうまく調整してみてください。 また、frame名をつけてあるのであれば、「frames["フレーム名"].location...」という指定も有効だったと思います。 とりあえず、こうしておけば、コンテンツにダイレクトに飛んできた時に、メニューフレーム付きの表示に切り替えることができると思います。 ただ、もしコンテンツごとに別のメニューページを用意しているとなると、もう少し複雑な仕掛けを組み込む必要もあるかも知れません。 参考になれば。

m-happy-t
質問者

補足

location.replace("フレームを切るHTMLのURI") これは、右側のHTMLの最後に書くということですよね。この、フレームを切るHTMLのURIはindexで良いのですか。 >そこにコンテンツページで保存したcookie情報(URI)>とフレームの指定を「frames[1].location...」とし>ましたが 理解できないのですが、詳しくお願いできませんか。