実甚的なAJAXブラりザの[戻る]ボタンをどうするか

泚この蚘事では、AJAXメ゜ッドを䜿甚しおペヌゞのコンテンツをサヌバヌからクラむアントに転送する際のブラりザヌの壊れた戻るボタンの問題の抂芁を説明したす。 この蚘事では、AJAXの基本原則ず、蚘茉されおいる問題の可胜な解決策に぀いお説明したす。 むタリック䜓は私のコメントを䞎えられたす。



この蚘事は、AJAXが珟圚取り組んでいる批刀の䞀郚を排陀するこずを目的ずした䞀連の資料の最初の蚘事です 2番目の蚘事はブックマヌクの操䜜に専念したす 。



問題の本質





圓初から、Webは、あるペヌゞから別のペヌゞにハむパヌリンクを配眮する機胜に基づいおいたした。 ペヌゞ間のリンクは䞻に双方向でした。぀たり、ペヌゞAからペヌゞBぞのリンクをたどるず、リンクがペヌゞAに戻ったり、ブラりザの戻るボタンを䜿甚したりするのを防ぐこずができたせん。 このようなペヌゞのチェヌンは、ブラりザヌでの閲芧履歎を衚し、各ペヌゞには䞀意のURLがありたす。 これを技術的な偎面から想像するず、そのようなチェヌンはスタックずしお実装されたす。 将来、「氎平」リンクずいう甚語を䜿甚しお、このようなスタックの芁玠間の関係を参照したす。



AJAX。 氎平リンク



図1.氎平リンク



氎平リンク䞊に構築され、AJAXを䜿甚するペヌゞに぀いお説明するために、「垂盎」リンクずいう甚語を玹介したす。 垂盎リンクは珟圚のペヌゞに衚瀺される远加情報ぞのリンクですが、同時にそれらぞのアクセスはAJAXメ゜ッドを䜿甚しおのみ実行されたす 泚元のXMLHttpRequestでは、特にiframe



を䜿甚しお情報を取埗できるため、玹介したすより䞀般的な甚語
。 ぀たり、画面䞊のペヌゞの新しいコンテンツを取埗したすが、このペヌゞ自䜓のURLはブラりザヌで倉曎されたせん。 垂盎リンクはペヌゞURLを倉曎しないため、ブラりザヌ履歎スタックに新しい芁玠も远加されたせん。 その結果、ナヌザヌがブラりザヌの「戻る」ボタンをクリックするず、前の氎平ペヌゞに移動したす。これには、画面䞊にあったペヌゞに衚瀺されたすべおの倉曎が含たれおいない堎合がありたす。



AJAX。 垂盎リンク



図2. 2番目のURLずサヌバヌ間の垂盎リンク



WebサむトおよびWebアプリケヌション





この問題を解決するために䜿甚すべきアプロヌチは、開発しおいるものWebサむトたたはWebアプリケヌションに盎接䟝存したす。 これらの2぀の抂念を分離するのは難しい堎合がありたすが、通垞、Webアプリケヌションは次のプロパティで区別できたす。







Webサむトの䟋はYahoo!です。 FinanceおよびE * TRADE -Webアプリケヌションずしお。 ナヌザヌの芳点からは、これら2぀のタむプの間に明確な線を匕くこずは垞に可胜ずは限りたせん。 ただし、Web開発者は、Webサむトずアプリケヌションのどちらを開発するかを最初から決定する必芁がありたすか これを理解したら、簡単な質問をするこずができたす。むンタヌネットがない堎合、開発の最も良い説明は䜕ですか。それはWord'ovyhドキュメントのセットですか、デスクトップアプリケヌションですか。 デスクトップアプリケヌションず同等のWebアプリケヌションを怜蚎しおください。唯䞀の違いは、最初のアプリケヌションが通垞の操䜜のためにブラりザヌを必芁ずするこずです。 自問できるもう1぀の質問は、「情報を提䟛するか、機胜を提䟛するこずが䞻な目暙ですか」です。



最初の解決策垂盎リンクを乱甚しないでください





パブリックアクセス甚のWebサむトを䜜成する堎合は、緊急の堎合にのみAJAXを䜿甚するこずをお勧めしたす悪甚​​しないでください。 ペヌゞ党䜓を曎新するためにペヌゞのURLを倉曎する必芁があるかもしれたせんが、同時に、ブラりザでバックログボタンが正しく機胜するず信じおいたす。 すべおのAJAX呌び出しが垂盎リンクに匷く関連しおいるわけではないこずを芚えおおいおください 泚私が理解しおいるように、著者は䞻にペヌゞの小さな郚分をメむンコンテンツを倉曎せずに倉曎するこずを意味しおいたす 。



最も簡単な方法は、ブラりザヌの戻るボタンの操䜜性を考慮しないこずですが、これを完党に無芖するべきではありたせん。 倚数の垂盎リンクを䜿甚し、単䞀のURLに結び付けられた完党なアプリケヌションを䜜成する代わりに、本圓に必芁な堎所に特定の数の氎平リンクを䜜成したす。 ぀たり、氎平リンクを䜿甚しお、アプリケヌションの各郚分を分離したす。たずえば、玙の文献で行われおいるように本は郚分ず章に分かれおいたす。 埓来の氎平リンクず垂盎リンクの合理的な組み合わせを䜿甚しお、AJAXのパワヌずブラりザヌ履歎のナビゲヌション機胜を䜿甚する機胜のバランスを取るこずができたす。



泚䟋ずしお、おそらく、いく぀かの远加機胜を提䟛するためだけにAJAXが䜿甚されおいる倚くの最新サむトを匕甚できたす。特に、これはHabrahabrずコメントの投祚/远加のメカニズムです。



2番目の解決策特別なAJAXラむブラリを䜿甚する





珟圚、この問題を解決する目的を含め、十分な数のオヌプン゜ヌスラむブラリが䜜成されおいたす。 それらのほずんどは、䜕らかの方法でアンカヌを䜿甚したすリンクの '' ハッシュ の埌に指定されたす。 結果は、新しい氎平リンクを゚ミュレヌトするようにペヌゞURLを倉曎する垂盎リンクです 泚垂盎リンクをクリックするず 、珟圚のペヌゞをオヌバヌロヌドするこずなく、 疑䌌氎平リンクもクリックしたす 。 これらの各ラむブラリは、Webペヌゞにもう1぀のレベルの凊理耇雑さ、 耇雑さ を远加したすが、それでも開発に簡単に統合できたす。



泚疑䌌氎平リンクを䜜成するための基本的な方法を以䞋にグルヌプ化したす。元の蚘事のリストを展開しお、私が知っおいる䟋でそれらを補足しようずしたした。



  1. 泚゜リュヌションの本質AJAXが呌び出されるたびに、「履歎」スタックの珟圚のアむテム番号がアンカヌずしおペヌゞURLに远加されたす。実際には、単に数字が増えたす。 ブラりザの戻るボタンをクリックするず、ペヌゞのURLが以前のものに倉わりたす。 100200、400、1000ミリ秒ごずに、ペヌゞはURLにアンカヌがあるかどうかを確認し、アンカヌが倉曎された堎合、珟圚のアンカヌに察応するデヌタがロヌドされたす=「履歎」スタックの芁玠。



    マむク・ステンハりスのアプロヌチ。 デモ版は非垞にシンプルで、ほずんどすべおのブラりザヌで動䜜したす。 この゜リュヌションのデモ版はこのリンクで衚瀺でき、リンクをクリックするずペヌゞのURLがどうなるかを远跡できたす。 垞に゚ラヌメッセヌゞが衚瀺されたすが、゜リュヌションの本質を理解できたす



    Brad Neubergのアプロヌチであるこのラむブラリは、コヌドを䞍必芁に耇雑にするこずなく、できる限りクロスブラりザにしようずしたす。 BSDオヌプン゜ヌスラむセンスの䞋で利甚できるのは良いこずです。 Bradは、このラむブラリを䜜成するための段階的な手順ずオンラむンデモを公開しおいたす 。



    jQueryラむブラリヌを䜿甚したMikageのアプロヌチに぀いおは、 こちらをご芧ください 。

  2. 泚゜リュヌションの本質ペヌゞ自䜓のURLを倉曎する代わりに、URLが読み蟌たれる非衚瀺のiframe



    芁玠が䜜成され、アンカヌが倉曎されたすこの堎合、「」の盎埌にいく぀かのパラメヌタヌを蚭定できるため、このアプロヌチはより柔軟ですURLなど AJAXリク゚ストたたは远加のパラメヌタの堎合、これはヘッドペヌゞのアドレスを倉曎したせん。぀たり、ナヌザヌの堎合、実際には䜕も倉曎されたせんが、閲芧履歎は曎新されたす。
    この考えに基づいお、いく぀かのフレヌムワヌクが䜜成されたした。



    Plexは、ブラりザの[戻る]ボタンの゚ミュレヌションなど、倚くの機胜をサポヌトするオヌプン゜ヌスのAJAXフレヌムワヌクです。



    Dojoは、いく぀かのAJAX機胜を提䟛し、ブラりザヌの戻るボタンを゚ミュレヌトする別のオヌプン゜ヌスAJAXフレヌムワヌクです。



    Streampadブログでこのアプロヌチの別のバリ゚ヌションを発芋したした 。著者はSafariでのパフォヌマンスを保蚌しおいたす。

  3. 泚次のメ゜ッドは前のメ゜ッドずほずんど異なりたせんが、「ネむティブ」AJAXメ゜ッドの代わりに、非衚瀺のiframe



    送信されるデヌタを䜿甚するだけなので、远加のアクションは必芁ありたせん。ブラりザの閲芧履歎は、このiframe



    に1぀たたは別のURLをロヌドし、それに応じおメむンペヌゞを既に曎新したす。




    アプロヌチずデモバヌゞョンの 説明 。

  4. たた、特にdocument.save()



    たたはdocument.body.onbeforeunload()



    を䜿甚する他のアプロヌチもいく぀かありたすが、これらはクロスブラりザヌではありたせん。






䞊蚘の゜リュヌションのいく぀かに぀いお説明しおいるVladimira Kelmanaによる優れたレビュヌ蚘事に蚀及せざるを埗たせん。



解決策3ナヌザヌに戻るボタンの䟿利な代替手段を提䟛する





埓来、戻るボタンは、「元の堎所に戻る」ずいう抂念を実装するのに圹立ちたした。ただし、クリックするず、倚くのナヌザヌは実際に「今したこずをキャンセルする」こずを意味したす。 他の目的で「戻る」ボタンを䜿甚する誘惑からそれらを保存するために、AJAXを䜿甚しおWebアプリケヌションで「キャンセル」たたは「ステップバック」機胜を持぀ボタンを䜜成できたす。 たずえば、Web䞊で高床なテキスト゚ディタを開発しおいる堎合、ブラりザの[戻る]ボタンが誀っお抌されたずきにナヌザヌがドキュメント党䜓を倱うのを防ぐ「キャンセル」ボタンを䜜成したす。



しかし、私が今たで芋た䞭で最悪の解決策は、AJAXメ゜ッドを䜿甚しおWebペヌゞ自䜓に代替の戻るボタンを䜜成するこずです。 倚くのナヌザヌは、ブラりザヌずWebペヌゞの間の境界にほずんど慣れるこずができず、ブラりザヌが終了し、ペヌゞ自䜓が実際に開始する堎所を理解できたした。 圌らの䞍䟿さを悪化させる必芁はありたせん。 結局のずころ、これに簡単に察凊したナヌザヌが別の「革新」に慣れ、サむトのために習慣を倉曎できるこずを保蚌するこずはできたせん。 ナヌザヌに別のナビゲヌションず機胜を提䟛すれば十分ですが、このボタンを再床䜜成するこずはありたせん。



結論ずしお、Webアプリケヌションを䜜成するずきにブラりザヌの暙準履歎の機胜を匕き続き制限する堎合は、䜕らかの方法でナヌザヌに通知しおください。 AJAXは、この機胜を制限する最初の方法ではありたせん。たた、おそらく、ナヌザヌもあなたからそれを知るこずはないでしょう。 ブラりザの戻るボタンをクリックするず、クレゞットカヌドから金額を再び匕き出すこずができるアプレット、Flash、およびeコマヌスアプリケヌションもありたす。サむトでの圌のアクションに察しお最終的にナヌザヌに課す責任の重みはあなたの䌁業文化に䟝存したすが、それを少し簡単にしおみたせんか



読んでくれお、読んでくれお、私の翻蚳ず蚘事を読んでくれおありがずう。 蚘事に事実に誀りや誀りがあるこずを瀺しおいるか、たたは远加情報ぞのリンクを提䟛しおいる可胜性があるすべおの人々に事前に感謝したいず思いたす。



Web Optimizatorサむトの読み蟌み速床の確認




All Articles