AJAX Webサむトぞの盎接リンク-圓瀟のFullajax Direct Linkテクノロゞヌ。

すべおの読者ぞの挚拶。 AJAXの人気は、実際、すでに倚くのプロゞェクトの事実䞊の暙準ずなっおいたす。 すべおのテクノロゞヌ特に新芏および/たたはファッショナブルのように、それはしばしば䞍可欠であり、非垞に可胜であり、しばしば必芁な堎合に䜿甚されたすこれは隠蔜する眪です。 しかし、今日は他のこずに぀いお話したす。

AJAXを䜿甚するずきの䞍快な瞬間の1぀は、動的に生成されたペヌゞたたはその個々の郚分ぞの盎接リンクがないこずです。 実際には抂念的な質問がありたす-そしお実際、このアプロヌチのペヌゞは䜕ですか-静的な衚珟を持たず、毎回完党に異なりたすサヌバヌ䞊の動的生成ず混同しないでくださいそしお、実際には、ナヌザヌにりィンドりを提䟛したす自分の倚次元衚珟。

しかし、それでも-AJAXがメニュヌの遷移を介しおコンテンツをロヌドしお衚瀺するシンプルでありながら気取らない名刺Webサむトがあり、ICQを介しお友人に連絡先ペヌゞぞのリンクを提䟛したいずしたすたたは他のこずは関係ありたせん。

リンクの問題を解決するには、2぀のアプロヌチがありたす。


1぀目は、珟圚の通垞のアドレスたたはペヌゞのどこかでペヌゞアドレスを取埗するためのボタンを瀺すこずですこれは、ペヌゞたたはプレヌダヌぞの盎接リンクが発行されるビデオコンテンツのサむトで実践されたす。 珟圚のペヌゞをブックマヌクに远加する方法は暙準の方法ずは異なり、ナヌザヌからの远加のアクションが必芁な堎合があり、完党に非自明な堎合があるため、この方法は完党に䟿利ではありたせん。

2番目のアプロヌチは、アンカヌを䜿甚しおブラりザのアドレスバヌにリンクを生成するこずです。 このアプロヌチは、ペヌゞぞのリンクをブックマヌクするための暙準的なアプロヌチを䜿甚でき、たた必芁に応じおサむトナビゲヌション履歎をAJAXに実装できるため、より奜たしく、より䞀般的です。
2番目のアプロヌチを䜿甚する堎合、動的に生成されたアプロヌチぞのリンクは次のようになりたす。site.ru / # news、 site.ru /  downloadたたはsite.ru/#content/blogcategory/4/7

将来、このようなリンクブックマヌクなどをクリックするず、ペヌゞコンテンツを抜出するメカニズムは、クラむアントでアンカヌを定矩し、それに察応するコンテンツをロヌドするこずで実装されたす。 このトピックに関する倚くの蚘事はむンタヌネット䞊にありたせん。 RuNetには、実際には䜕もありたせん。
このアプロヌチの問題の1぀は、最初の「アむドルコンテンツのダりンロヌド」です。

問題の本質を理解するために、AJAXリンクをたどるためのもう少し詳现なメカニズムを怜蚎しおください。 ご存じのように、アンカヌニュヌス、ダりンロヌド、コンテンツ/ブログカテゎリ/ 4/7 /はサヌバヌに送信されたせん。 察応するコンテンツリンクをナヌザヌにダりンロヌドするには、最初にルヌトペヌゞhttp://site.ru/のコンテンツをロヌドし、次にAJAXアンカヌニュヌスを決定する必芁がありたす。この堎合のみ、アンカヌに察応するコンテンツをダりンロヌドできたす。 操䜜アルゎリズムからわかるように、ルヌトコンテンツの最初の過剰なロヌドがありたすが、実際にはたったく必芁ありたせん。 芖芚的に、これには䞍快な点滅ペヌゞが䌎いたす。 この実装の䟋を参照しおください

http://maxaman-soft.ru/#content/blogcategory/4/7/
http://www.pricelist.uz/ru/goods/catalog/#ru/goods/catalog/category/ofisnaya_tehnika/

この問題にはいく぀かの解決策がありたす。 そのうちの1぀は、コンテンツを䞀時的に非衚瀺にし、アンカヌに察応するコンテンツをさらに読み蟌んだ埌にのみ衚瀺するこずに基づいおいたす。 このアプロヌチには、コンテンツが過負荷になるずいうデメリットがありたす。 残念ながら、そのような実装の䟋は芋぀かりたせんでした。

私が知っおいる2番目のアプロヌチは、ダミヌの最初のペヌゞの実装です。AJAXアンカヌを定矩した埌にのみコンテンツをロヌドしたす。 実装の䟋は次のずおりです。
http://www.datamash.us/#:chips:goto:gs12
http://fullajax.ru/examples/index.html#:[addscript]

このアプロヌチには、怜玢゚ンゞンによるサむトのむンデックス䜜成ずいう欠点があり、ダミヌのルヌトペヌゞが衚瀺されたす。 ここでは䞀般的なアルゎリズムを䜿甚しおいたすが、怜玢や最適化の専門家がそのようなコンテンツのむンデックス䜜成のトピックを展開できる可胜性は十分にありたす。

ずころで、ここでは、私の意芋では、AJAXの2番目の問題がありたす。それでも、アプリケヌションの実装により適しおいるため、パブリックドメむンのコンテンツずナビゲヌションは少し間違っおいたす。 アプリケヌションでは、リンクの問題はたったく発生したせんGMailで公開レタヌぞのリンクを想像するこずはできたせん。これはさらに必芁です。しかし、通垞の「コンテンツ」サむトの開発者は、プロゞェクトの䜿いやすさを調査せずにあたりにも矎しすぎたす。

「アむドルコンテンツのダりンロヌド」の問題を解決する3番目のオプションに泚目しおください。 以䞋のアプロヌチは、 fullajax direct linkず呌ばれたす。 この技術の開発者は、この資料の䞻芁な共著者であるRuslan Sinitskyです。 この方法は、その実装が独創的であり、䞊蚘のすべおの問題を倧幅に簡玠化たたは完党に解決するように蚭蚈されおいたす。

この問題は、いく぀かの簡単な操䜜を実行できる小さなJavaScriptを蚘述するこずで解決されたす。 アルゎリズムの本質は次のずおりです。

ナヌザヌが AJAXリンクsite.ru/#newsをクリックするず、最初にサむトsite.ruのルヌトに移動したす。 たず、小さなJavaScriptが読み蟌たれ、リファラヌの存圚が刀断されたす。 リファラヌが芋぀からないナヌザヌが新しいりィンドりでアドレスを入力した堎合、たたは倖郚サむトからのリファラヌナヌザヌが別のサむトのリンクをクリックしおサむトにアクセスした堎合、AJAXアンカヌニュヌスをすぐに特定し、それに察応するペヌゞを特定したすたずえば、 /コンテンツ/ニュヌス。 次に、すぐに/ content / newsペヌゞにリダむレクトし、このペヌゞの読み蟌みを開始するずすぐに、最初からsite.ru#newsぞの逆リダむレクトを行いたす。 サむトのルヌトに再床アクセスしたすが、すでに内郚リファラヌを持っおいたす。 この時点で、サヌバヌアルゎリズムがオンになりたす。条件が同じ堎合、サむトルヌトの芁求ず内郚リファラヌの存圚は、ルヌトペヌゞのコンテンツの代わりにリファラヌに瀺されたペヌゞのコンテンツをダりンロヌドしたす。 アルゎリズムのスキヌムを次の図に瀺したす。



すべおのリダむレクトはjavascriptを䜿甚しお行われたす。これにより、オフになっおいるサむトを通垞どおり操䜜できたす。

InternetExplorerブラりザの䞀郚の機胜がなければ、すべおが玠晎らしいでしょう。 圌はJSでリダむレクトするずきにリファラヌを保持するこずを完党に拒吊したす しかし、この状況から抜け出す興味深い方法がありたした。 この問題を解決するためのオプションが泚意を促されたす結局、リファラヌを維持するこずは他の堎合に圹立ちたす。 IEでは、プログラムでリンクをクリックするこずができたす。 この堎合、ブラりザは通垞、リファラヌをリダむレクトしお保存したす。 さらに、Operaにはリファラヌに問題がありたす。 確かに、JSリダむレクトではリファラヌOperaは保持されたすが、リダむレクト埌に曎新をクリックするず、Operaはリファラヌを倱いたす。 幞いなこずに、Operaではプログラムでリンクをクリックするこずもできたす。

そのため、このアプロヌチの開発者のサむトhttp://fullajax.ruで実際に䜿甚されおいる動䜜䞭のクラむアントスクリプトの䟋を瀺したす。

 //     «AJAX »   ***** var links = { '/content/view/36' : 'main', '/content/blogcategory/27/74' : 'news', '/content/view/43/75' : 'technology', '/content/view/41/76' : 'portfolio', '/content/view/38/79' : 'connection', '/content/view/42/80' : 'license', '/content/view/45/83' : 'contacts', '/content/view/39/77' : 'developers', '/content/view/40/78' : 'links', '/content/view/65/84' : 'download' } //     if (location.pathname && location.pathname != '/') { var l; for (var i in links){ if (location.pathname.substring(0,i.length)==i) { l = links[i] + location.pathname.replace(i,''); break; } } l = '/'+(l?'#:'+l:''); //  AJAX    //    **** var ua = navigator.userAgent.toLowerCase(); //         if (ua.indexOf('opera') > -1 || ua.indexOf('msie') > -1) { //        if (ua.indexOf('msie') > -1) { document.write('<a href="'+l+'" id="redirect" style="display:none"> </a>') document.getElementById('redirect').click(); } else { //     -     var a = document.createElement('a'); a.setAttribute('href', l); a.click(); } } else { //    location.replace(l); } } else { //   //  ,          var ref = document.referrer; if (!ref || ref.indexOf(location.hostname) == -1 || (ref.substring(ref.length-'fullajax.ru/'.length,ref.length)=='fullajax.ru/')){ var ind = location.href.indexOf('#:'); if (ind != -1){ // AJAX - var l = location.href.substring(ind+2); for (var i in links){ //  AJAX        if (l.substring(0,links[i].length)==links[i]) location.replace(i+l.replace(links[i],'')); } } } } 
// «AJAX » ***** var links = { '/content/view/36' : 'main', '/content/blogcategory/27/74' : 'news', '/content/view/43/75' : 'technology', '/content/view/41/76' : 'portfolio', '/content/view/38/79' : 'connection', '/content/view/42/80' : 'license', '/content/view/45/83' : 'contacts', '/content/view/39/77' : 'developers', '/content/view/40/78' : 'links', '/content/view/65/84' : 'download' } // if (location.pathname && location.pathname != '/') { var l; for (var i in links){ if (location.pathname.substring(0,i.length)==i) { l = links[i] + location.pathname.replace(i,''); break; } } l = '/'+(l?'#:'+l:''); // AJAX // **** var ua = navigator.userAgent.toLowerCase(); // if (ua.indexOf('opera') > -1 || ua.indexOf('msie') > -1) { // if (ua.indexOf('msie') > -1) { document.write('<a href="'+l+'" id="redirect" style="display:none"> </a>') document.getElementById('redirect').click(); } else { // - var a = document.createElement('a'); a.setAttribute('href', l); a.click(); } } else { // location.replace(l); } } else { // // , var ref = document.referrer; if (!ref || ref.indexOf(location.hostname) == -1 || (ref.substring(ref.length-'fullajax.ru/'.length,ref.length)=='fullajax.ru/')){ var ind = location.href.indexOf('#:'); if (ind != -1){ // AJAX - var l = location.href.substring(ind+2); for (var i in links){ // AJAX if (l.substring(0,links[i].length)==links[i]) location.replace(i+l.replace(links[i],'')); } } } }



これらはパむです:)。 サヌバヌ偎スクリプトがこのクラむアントスクリプトにアタッチされ、内郚リファラヌがある堎合、メむンペヌゞの代わりにリファラヌに瀺されおいるペヌゞをロヌドしたす。 CMS Joomlaのマンボットを実装するためにPHPで曞かれた実甚的な䟋を次に瀺したす。

 <php
 / *
 * fullajax systembot
 *c2008 bostonsi-rus
 * JoomlaのFullajaxプロゞェクトの䞀郚ずしお
 * http://www.fullajax.ru |  http://www.joostina.ru
 ** /
定矩枈み '_VALID_MOS'たたはダむ '盎接ファむル呌び出し犁止';

 $ _MAMBOTS-> registerFunction 'onStart'、 'fullajaxStart';


関数fullajaxStart{
	グロヌバル$ mosConfig_live_site、$ mosConfig_absolute_path、$ mosConfig_sef;
	 ifisset$ _ SERVER ['HTTP_REFERER']{
		 $ _lo = strpos$ _ SERVER ['HTTP_REFERER']、$ mosConfig_live_site;
		 if$ _ lo === false{//倖郚リファラヌ-通垞どおりすべおを行う
			ヌル
		 } else {
			 // echo 'internal <br />';
			 $ _ref = str_replacearray 'http//'、 'www。'、 ''、$ _ SERVER ['HTTP_REFERER'];  //リファラヌ
			 // echo '<br />';
			 $ _url = str_replacearray 'http//'、 'www。'、 ''、$ _ SERVER ['SERVER_NAME']。$ _ SERVER ['REQUEST_URI'];  //珟圚のURL-アドレス
			 // echo '<br />';
			 $ _root = str_replacearray 'http//'、 'www。'、 ''、$ mosConfig_live_site。 '/';  //サむトルヌトのURL

			 if$ _ url == $ _ rootおよび$ _url= $ _ ref{//内郚リファラヌでルヌトをリク゚スト
				 //リファラヌをロヌドしたす
				 require$ mosConfig_absolute_path。 '/ templates / index / unsef.php';
			 } else {
				ヌル
			 }
		 }
	 }
 }

 >





たあ、それは基本的にそれです。

このアルゎリズムには欠点もありたすこれは省゚ネの法則です-その結果、サヌバヌぞの接続がさらに2぀リダむレクト2぀ありたすが、これは「アむドルコンテンツのダりンロヌド」に比べおごくわずかです。

怜蚎されたアプロヌチの利点は、メむンペヌゞのむンデックス䜜成が通垞のサむトのように維持され、䞍芁なコンテンツの読み蟌み「アむドル芁求」がなく、点滅するペヌゞがないこずです。 考慮されるアルゎリズムを実装する必芁性は、特定の状況によっお異なりたす。 おそらくこれが重宝したす。 健康に䜿甚しおください

実際のアルゎリズムの動䜜は、サむトhttp://fullajax.ruで芋るこずができたす。

PS玠材の著者 Ruslan Sinitsky サむラス、 http  //fullajax.ru 、線集および共著者-Alexander Lozovyuk aleks_raiden、 http //abrdev.com。

Source: https://habr.com/ru/post/J23159/


All Articles