3

オフラインでも使用できるようにする必要があるアプリケーションがあります。Javascript/Jquery を使用してクライアント上で動的コンテンツを構築するのと、サーバー上で構築するのに問題はありませんが、基本的なページ レイアウトに固執しています。

現在、私のserver-onlyページは次のように構成されています (私は を使用していColdfusionます):

<cfsavecontent variable="renderedResults">
    <!--- Doctype --->
    <cfinclude template="../templates/tmp_pagetop.cfm">
    <cfoutput><head></cfoutput>
    <cfif NOT isAjaxRequest()>
        <!--- page header with all meta/js/css/icons... --->
        <cfinclude template="../templates/tmp_pageheader.cfm">
    </cfif>
    <cfoutput>
            <title>#variables.title# | #tx_select_title#</title>
        </head>
        <body>
        // page
        </body>
    </html>
    </cfoutput>
</cfsavecontent>

<!--- COMPRESS --->
<cfscript>
    compressedHTML = reReplace(renderedResults, "\>\s+\<", "> <", "ALL");
    compressedHTML = reReplace(compressedHTML, "\s{2,}", chr(13), "ALL");
    compressedHTML = reReplace(compressedHTML, "\s{2,}", chr(09), "ALL");
    variables.alredayBinary = "false";
</cfscript>
<!--- GZIP --->
<!--- SET HEADER --->
<!--- SEND BACK --->

Ajaxを介して後続のページをリクエストするときにJquery Mobile、最初のページを完全にロードheadし、ヘッダーを再度使用しないを使用しています。そのため、ページが Ajax 経由でリクエストされているかどうかを確認しています。そうであれば、JQM で使用されないため、後続のページ リクエストで 8k のヘッダーをクライアントに送信することをスキップします。

また、私のヘッダー テンプレートには、次のような多くの条件付きコンテンツが含まれています。

<cfif structKeyExists(cgi, "HTTP_USER_AGENT" ) AND findNoCase("facebook", cgi.http_user_agent) NEQ 0>
    <cfoutput>
        <meta property="og:title" content="#variables.title#"/>
        <meta property="og:type" content="website"/>
        <meta property="og:url" content="#variables.base#" />
        <meta property="og:site_name" content="#variables.user_firma#"/>
        <meta property="og:description" content="#variables.user_fbds#"/>
        <meta property="fb:admins" content="#variables.user_fbadmin#" >
    </cfoutput>
</cfif>

そのため、ページが Facebook によって要求された場合にのみ、Facebook Open Graph メタを含めます。このようにして、Google からリクエストされたページは W3C 検証に合格します。

今すぐチャレンジ... この静的でオフラインで利用できるようにする方法。

私はしばらくそれについて考えてきましたが、実際には良い解決策を思いつきません。もし私が

  1. ページ全体を提供する = W3C 検証に失敗し、オンライン ユーザーはすべてのページ リクエストで 8k のペナルティを受けます (はい、gzip されていますが、それでも)
  2. ヘッダーなしでページを提供する = 実際にはオプションではない
  3. ページの 2 つのバージョン (1 つはオンライン用、もう 1 つはオフライン用) を提供する = オフライン ページはキャッシュされ、ユーザーはオンラインであってもキャッシュからそのバージョンに「スタック」します。
  4. 最初のページのみを完全なヘッダーで作成します = 最初以外のページから開始するユーザーは壊れたページ (ヘッダーなし) になります。メイン ページも検証に失敗します。

確かに、すべてを手に入れることはできませんが、これを可能な限り最善の方法で行うためにどのアプローチを採用できるかを知りたいです。

入力していただきありがとうございます!

4

1 に答える 1

3

セッション変数を設定して、ヘッダーがロードされたことを示すことができます。次に、各ページでその変数をチェックし、変数がある場合はコンテンツのみを表示します。そこにない場合は、頭と内容を表示します。

于 2012-12-20T21:52:00.363 に答える