オフラインでも使用できるようにする必要があるアプリケーションがあります。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 検証に合格します。
今すぐチャレンジ... この静的でオフラインで利用できるようにする方法。
私はしばらくそれについて考えてきましたが、実際には良い解決策を思いつきません。もし私が
- ページ全体を提供する = W3C 検証に失敗し、オンライン ユーザーはすべてのページ リクエストで 8k のペナルティを受けます (はい、gzip されていますが、それでも)
- ヘッダーなしでページを提供する = 実際にはオプションではない
- ページの 2 つのバージョン (1 つはオンライン用、もう 1 つはオフライン用) を提供する = オフライン ページはキャッシュされ、ユーザーはオンラインであってもキャッシュからそのバージョンに「スタック」します。
- 最初のページのみを完全なヘッダーで作成します = 最初以外のページから開始するユーザーは壊れたページ (ヘッダーなし) になります。メイン ページも検証に失敗します。
確かに、すべてを手に入れることはできませんが、これを可能な限り最善の方法で行うためにどのアプローチを採用できるかを知りたいです。
入力していただきありがとうございます!