2012-12-20 1 views
3

나는 오프라인에서도 사용할 수 있도록해야하는 응용 프로그램이 있습니다. Javascript/Jquery를 사용하여 서버에서 동적 컨텐트를 만드는 데는 아무런 문제가 없습니다. 그러나 기본 페이지 레이아웃에 문제가 있습니다.온라인 및 오프라인 응용 프로그램에 대해 동일한 HTML 페이지를 제공하는 방법은 무엇입니까?

이 지금 내 server-only 페이지 (내가 Coldfusion을 사용하고 있습니다) 다음과 같이 구성되어 있습니다 :

나는 전체 head로 첫 페이지를로드하지하고 다시는 헤더를 사용 Jquery Mobile을 사용하고
<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를 통해 후속 페이지를 요청할 때. 따라서 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> 

그래서 난 단지 페이지를 페이스 북에 의해 요청 된 페이스 북 오픈 그래프 메타를 포함 :

또한, 내 헤더 템플릿은이 같은 조건 내용을 많이 포함되어 있습니다. 이렇게하면 Google에서 요청할 경우 페이지가 W3C 유효성 검사를 통과합니다.

지금 도전하십시오 ...이 정적 및 오프라인에서 사용 가능하게 만드는 방법.

저는 잠시 생각해 봤지만 좋은 해결책을 찾지 못했습니다. 내가

  1. 전체 페이지를 봉사하는 경우 = 나는 W3C 유효성 검사에 실패한 온라인 사용자가 모든 페이지 요청
  2. 에 (예, 여전히 gzip으로 압축 그러나 것) 8K 처벌을받을 정말 =하지 헤더 옵션없이 페이지를 봉사
  3. 두 버전의 페이지를 제공합니다 (오프라인 용 1 개, 오프라인 용 용). 오프라인 페이지가 캐싱되며 사용자가 온라인 상태 인 경우에도 캐시에서 해당 버전을 "멈추게"됩니다 ( ).
  4. 첫 번째 페이지를 전체 머리글로 = 첫 번째 페이지 이외의 페이지에서 시작하는 사용자는 잘못된 페이지 (머리글 없음)에 있습니다. 메인 페이지 또한 검증에 실패합니다.

나는 모든 것을 가질 수는 없지만, 가능한 최선의 방법으로 어떤 방법을 사용할 수 있는지 알고 싶습니다.

감사합니다.

+0

오프라인으로 무엇을 의미합니까? – blueberryfields

+0

인터넷 연결없이 실행 중입니다. – frequent

답변

3

세션 변수를 설정하여 헤더가로드되었음을 나타낼 수 있습니다. 그런 다음 각 페이지에서 해당 변수를 확인하고 거기에있는 경우 내용 만 표시하십시오. 거기에 없으면 머리 + 내용을 표시하십시오.

+0

mh. 좋은 생각 같아. 감사! – frequent

+0

문제가 없습니다! :) 그것은 오프라인 페이지에 대한 올바른 방향으로 당신을 얻을 것입니다. – Shomz

관련 문제