- ベストアンサー
別のページ途中に飛ぶ#ジャンプの確実性が薄い
aaa.phpにいるとします。 bbb.phpのページには特集B1(a name="b1")、特集B2(a name="b2")、特集B3(a name="b3")とあるとします。 aaa.phpから、bbb.phpの特集B3に飛ばしたいので、 セオリー通り<a href="bbb.php#b3">でジャンプさせたのですが、 B3まで飛ばずにB2あたりでとまったりすることがあります。 ロードが読み込みきれていなくて、ジャンプが不完全になってしまうのでしょうか? この改善はできるのでしょうか? ブラウザ・回線の限界でしょうか?
- みんなの回答 (7)
- 専門家の回答
質問者が選んだベストアンサー
>セオリー通り<a href="bbb.php#b3">でジャンプさせたのですが、 >具体的にはbbb.php?get=1#b3 のようにとばしています。 QUERY_STRINGSではなく、標準入力、あるいはPATH_INFOでデータを渡すほうがよいです。 #---部分識別子(fragment identifier)が、QUERY_STRINGSに続く場合、ブラウザはそれを取得できない場合があります。 [テスト] http://hpcgi1.nifty.com/Iruka/ENV_FORM.cgi[***********]#form_check で、[***********]の部分を ?name=abc&sex=male&l_like_green=on&l_like_cyan=on&text=ttt /name~abc/sex~male/l_like_green~on/l_like_cyan~on/text~ttt あるいは、フォームに上記値を入力してテストしてください。 一番上はQUERY_STRINGS 二番目は、PATH_IBFO 三番目は標準入力になります。
その他の回答 (6)
- ORUKA1951
- ベストアンサー率45% (5062/11036)
>最初の数器用目に終端アンカーがあればそこに飛ぶはずです。 ではなくて「最初の数行目に」です。また、QUERY_STRINGSを少なくして。 それでOKならブラウザの問題です。
- ORUKA1951
- ベストアンサー率45% (5062/11036)
>動的URLを静的URLに変更する記述をhtaccessに設置しました。 意味ありません。 URIに使用できる文字は、;\/?:@&=+\$,A-Za-z0-9\-_.!~*'()だけです。 RFC 2396 - Uniform Resource Identifiers (URI): Generic Syntax ( http://tools.ietf.org/html/rfc2396 ) #はブラウザからサーバーには送られないデータで、たとえサーバーから提供されても無視されます。 単純にブラウザが#以下の文字列を理解していないか<ページレイアウトを決定するのに時間がかかっているだけです。 最初の数器用目に終端アンカーがあればそこに飛ぶはずです。
- ORUKA1951
- ベストアンサー率45% (5062/11036)
説明を補完しておきます。 #以降はサーバーには送られません。先のURLに対してもFirefox+Live HTTP Headersで確認すると http://hpcgi1.nifty.com/Iruka/ENV_FORM.cgi#form_check という入力に関して GET /Iruka/ENV_FORM.cgi HTTP/1.1 Host: hpcgi1.nifty.com User-Agent: Mozilla/5.0 (Windows; U; Windows NT 5.1; ja; rv:1.9.2.16) Gecko/20110319 Firefox/3.6.16 (.NET CLR 3.5.30729) ・・・【以下略】・・・ と要求されます。 したがって、そのデータが送られてきた後でユーザーエージェントがそのファイル内の終端アンカーを探すのですから、回線などの影響は考えられません。 IEでよく聞くトラブルですので、ブラウザの能力と考えるほうがよいでしょう。QUERY_STRINGSと、#以降を区別できていない(^^)。 そのために、サーバーに要求するときはPOSTの標準入力で渡すか、PATH_INFOを使って渡すほうが確実です。サーバーサイドのプログラムを見直しましょう。
補足
悪戦苦闘してまして返事が遅くなりました。 動的URLを静的URLに変更する記述をhtaccessに設置しました。 RewriteEngine on RewriteOptions MaxRedirects=1 RewriteBase /detail RewriteCond %{REQUEST_FILENAME} !-f RewriteRule bbb-([0-9]+)\.php#b3$ bbb.php?get=$1#b3 [L] bbb-1.php#b3 へのアクセスで bbb.php?get=1#b3 に飛ぶように。 ただ、アドレスバーに直接URLを打てば飛ぶのですが、 phpファイル内にリンクとして記入してもエラーになってしまいます。
- think49
- ベストアンサー率59% (285/482)
#2 です。 直接的にはクエリは関係ないはずです。 サーバサイドの処理に時間がかかっていることが影響している可能性はありますが…。 あと思いつくのは JavaScript が誤動作している可能性を考慮して [インターネットオプション] で JavaScript をオフに設定してみるぐらいでしょうか。 全てのページで発生するのでしょうか?特定のページだけでしょうか? 不具合の発生条件を特定していくのが先決だと思います。
- think49
- ベストアンサー率59% (285/482)
クエリの有無は関係ないと思います。 http://okwave.jp/qa/q6698597.html?sort=datetime:ASC#ok_area_l 他に考えられる理由は…。 ・tableレイアウトをしていて描画に時間がかかっている ・移動が完了する前にマウスorキーボードでスクロールしている
補足
tableはジャンプ先の同一ページ内の別の部分に使っていますが、 そんなに重たくないはずです・・。 そしてマウス等はノータッチです。 FIREFOXだと問題なく、IEだと6でも7でも8でも駄目です。 formでデータベースを探しているから 多少遅延は起きるかもしれませんが、クエリは関係ないんですよね? 参りました。
- ORUKA1951
- ベストアンサー率45% (5062/11036)
どこも触らず、ページがすべて(そのページ内アンカーの位置まで)読み込まれるまで待てばたどり着くはず。
補足
やはり待ってもだめでした。 1つ気になるのが、aタグではなく、form(get)で飛ばしています。 具体的には bbb.php?get=1#b3 のようにとばしています。 formだと非推奨なのでしょうか?
お礼
大変遅くなり申し訳ありません。 ずっとpath_infoとは何ぞやと勉強していたのですが、 残念ながら私では理解できませんでした。 今回のジャンプの件は諦めようと思います。 ありがとうございました。