javascript document.lastModified가 작동을 멈추고 현재 날짜를 반환하는 이유는 무엇입니까?

javascript document.lastModified가 작동을 멈추고 현재 날짜를 반환하는 이유는 무엇입니까?

Ubuntu에 javascript를 사용하여 표시된 텍스트의 일부로 마지막 수정 날짜를 반환하고 다음을 생성하는 일부 웹 페이지가 있습니다.

Last modified: 08/28/2017

이는 페이지의 실제 마지막 수정 날짜입니다. 하지만 최근에는 현재 날짜가 반환됩니다. 페이지를 변경하지 않았습니다. 확인해 보니 lastModified를 올바르게 반환하는 모든 웹 페이지에서 이런 일이 발생합니다. 내 Macintosh에는 이러한 페이지 중 일부가 있으며 "localhost"에서 호출할 수 있습니다. 그들은 정확한 마지막 수정 날짜를 제공하고 Ubuntu 버전과 Macintosh 버전 간의 여러 웹 페이지를 비교했으며 내용, 생성 날짜 및 마지막 수정 날짜 측면에서 동일합니다.

무슨 일인지 아는 사람 있나요? 다음은 LastModified의 시간 부분을 생략하고 날짜 부분만 반환하는 데 사용하는 JavaScript입니다.

Last modified:
<script language="JavaScript">
var testlast=document.lastModified;
testlast=testlast.substr(0,10);
document.write(" "+testlast);
</script>

Ubuntu에서는 이제 다음이 생성됩니다.

Last Modified: 09/02/2018

내 Mac에서는 여전히 다음을 생성합니다.

Last modified: 08/28/2017

답변1

나는 다른 서버(브라우저 로컬 또는 외부)에서 "마지막 수정 날짜"를 가져오는 문제에 대한 해결책을 찾았다고 생각합니다. 비결은 html 문서에서 SSI(Server Side Instructions)와 Javascript를 결합하는 것입니다. 다음은 문서의 거의 모든 위치에 삽입할 수 있는 코드입니다.

Last modified:
<script language="JavaScript">
var tconfig = '<!--#config timefmt="%m-%d-%Y" --><!--#echo  var="LAST_MODIFIED" -->';
var testlast=document.lastModified;
var tsize=tconfig.length;
if ((tsize > 20) || (tsize < 2))
{ document.write(" "+testlast.substr(0,10)); }
else document.write(" "+tconfig);
</script><br />

서버가 문서를 가져오면 SSI 지시문이 실행되고 결과 값이 지시문으로 대체됩니다. 따라서 tconfig는 아포스트로피 안의 문자열이 됩니다. SSI 명령어가 실행되지 않으면 명령어가 포함된 주석(긴 문자열)이 유지됩니다. 변수 세트에는 문자열 크기가 있으며 클라이언트(브라우저)가 JavaScript를 실행할 때 테스트할 수 있습니다. 합당한 범위 내에 있는 경우 서버에서 결정한 "마지막 수정 날짜"여야 합니다. 그렇지 않은 경우 Javascript는 "testlast" 변수에서 이를 결정하려고 시도합니다. testlast의 하위 문자열 또는 "tconfig" 값이 출력됩니다. 더 나쁜 것은 Javascript의 testlast 변수에서 오늘 날짜를 얻을 수 있다는 것입니다.

나는 "최종 수정:"을 표시하려는 모든 문서에 이 패치를 사용합니다. 그런데 SSI 코드에서는 대시를 사용하고 Javascript 코드에서는 슬래시(기본 구분 기호)를 사용했습니다. 그러면 어떤 메커니즘이 가치를 제공하는지 쉽게 구분할 수 있습니다.

관련 정보