5

AJAXディープリンクサイトを構築しています。

ユーザーがJavascriptでサポートされていないブラウザーを使用してサイトにアクセスしようとしている場合、または検索クローラーである場合は、PHPでページのすべてのHTMLコードをロードする必要があります。基本的に、PHPはページ全体を返します。

それどころか、ユーザーがJavascriptでサポートされているブラウザーでサイトにアクセスしようとしている場合、PHPがテンプレートコードのみを返し、残りはJavascript(AJAX)に任せたいと思います。基本的に、PHPはデザイン要素のみをロードし、Javascriptがそれらにコンテンツを入力できるようにします。

PHPの機能を調べましget_browser()たが、それほど信頼できるツールではないようです。ブラウザがJavascriptをサポートしているか、PHPを使用した検索クローラーであるかを確認する業界の慣習は何ですか?


背景

サイトにこの動作をさせたい理由。

example.comPHPにクエリを送信しないアドレス:をロードするだけでホームページをロードしたいので、PHPはホームページのHTMLコードを返します。ただし、これにより、ユーザーが次のページを読み込もうとすると問題が発生しますexample.com#foo。したがって、この例では、PHPはホームページを返し、ホームページが読み込まれると、Javascript(AJAX)がコンテンツを変更して、次の適切なコンテンツを表示します。#foo。これにより、ユーザーはホームページを見ることができるようになるため、読み込み時間が遅くなり、ユーザーエクスペリエンスはそれほど良くありません。ただし、私のPHPスクリプトが、Javascriptでサポートされているブラウザを使用してページを読み込もうとしている場合、コンテンツを含まないWebサイトのテンプレートのみが返されることを理解できれば、javascriptはそのテンプレートにコンテンツを入力します。 #fooに表示されるはずです。一方、Javascriptの分離されていないブラウザまたはクローラーがページにアクセスしようとすると、ホームページexample.com#fooが返されます。

ディープリンクにSWFaddress(http://www.asual.com/swfaddress/)ライブラリを使用しています。


編集

君たちありがとう。以前は使うことを考えていませんでした<noscript></noscript>

これが私がやろうと決心したことです。PHPはデフォルトで、example.comまたは(定義上フラグメントはサーバーに送信されないため、PHPの観点からexample.com#fooは本質的に同じです)などのページをロードします。ホームページのコンテンツのタグが内部にある空白(ビジュアルテンプレートのみ)。このように、javascriptを使用しているユーザーにはホームページが表示されず、AJAXはフラグメントに従ってページのコンテンツにデータを入力します。一方、検索クローラーとjavascriptのないユーザーには、ホームページが表示されます。example.com<noscript>#foo

ありがとうございました。これは非常にシンプルでエレガントなソリューションだと思います。さらに提案がある場合は、コメントまたは別の回答を投稿してください。

4

5 に答える 5

5

PHPを使用してこれを行うことはできません。ただし、javascriptがない場合は、noscriptタグを使用して別のphpページにリダイレクトすることができます。

<noscript>
<meta http-equiv="refresh" content="0; URL=nojavascript.php">
</noscript>
于 2010-11-16T18:15:34.790 に答える
1

あなたがやろうとしている方法でこれを達成することは不可能です。

誰かがJSをオフにして、それを知らないことはめったにありません。

PHPは#の後に何も渡されません。javascriptだけがそれを使って何でもできます。したがって、PHPがブラウザでJavaScriptがオンになっているかどうかを判断できたとしても、#とにかく読み取ることができませんでした。

于 2010-11-16T18:12:19.533 に答える
1

のようなものをユーザーに示すリンクをいくつかの<NOSCRIPT>タグ内に含めることができますexample.com#foo?javascript=disabled

残念ながら、ブラウザはJSが有効になっているかどうかを報告しないため、単純なHTTP GETから、JSに依存するページを送信する必要があるかどうかを知る方法はありません。

于 2010-11-16T18:16:56.803 に答える
0

javascriptを有効にするためのセッション変数を設定するAJAXクエリを作成する必要があります。

サイト上の他の情報がロードされる前にこのAJAXクエリを実行してから、実際のサイトへの単純なリダイレクトを実行します。

次のような擬似コードを実行できます。

Index.php:

ajax(check_js.php);
redirect(main_page.php);

check_js.php

$_SESSION['js_enable'] = true;

main_page.php

if($_SESSION['js_enable'] == true) {
  //execute page
} else {
  header("Location: no_js_error.php");
}
于 2010-11-16T18:15:43.963 に答える
0

サーバーがユーザーの設定を盗聴しようとする代わりに、そもそも控えめなJavaScriptを使用するのはどうでしょうか。このように、JSが使用できない場合、ページは正常に(目的の状態に)低下します。

于 2010-11-16T18:17:48.093 に答える