Javascript로 로컬 파일 (file ://)을 읽어보십시오.

회사의 NAS에있는 거대한 로그 파일 검색 도구를 만들 필요가 발생했습니다.
JavaScript로 해보자, 가벼운 마음으로 10 몇 년 만에 JS에 착수.

그러나 사내의 보이지 않는 벽으로 인해 사내 클라우드도 웹 서버를 세우는 것이 사실상 불가능했습니다.

본래 여기서 포기하고 다른 기법을 찾아야 합니다만…
우선 파일을 읽어 브라우저의 엔진으로 처리를 할 수 있으면 좋기 때문에, XHR를 사용해 파일을 읽어 보겠습니다.

main.html
<!DOCTYPE html>
<html lang="ja"><head><meta charset="UTF-8"></head>
<body>
    <script type="text/javascript">
        const xhr = new XMLHttpRequest();
        var data;

        window.onload = function onLoad() {
          xhr.open('GET', './data/test.txt', false); // GETでローカルファイルを開く
          xhr.onload = () => {
              data = xhr.responseText;
          };
          xhr.onerror = () => {
             console.log("error!");
          };

         xhr.send();

          cts1 = document.getElementById("cts1");
          cts1.innerText = data;
        }
    </script>
    <div class="contents" id="cts1"></div>
 </body>
</html>

아래의 브라우저에서 동작 확인했습니다.
- Firefox Quantam 62.0.3
- Chrome 69.0.3497.100
- Microsoft Edge 42.17134.1.0

Chrome은 시작할 때 다음 옵션을 지정하지 않으면 작동하지 않았습니다.
- --allow-file-access-from-files···file://을 사용할 수 있도록 한다
- --disable-web-security ...다른 폴더의 파일에 액세스 가능으로 한다
- --user-data-dir ...

FireFox에서는 로컬 원격 파일을 로드할 때 설정을 변경해야 합니다.
about:config를 열고
- strict_origin_policy = True(기본값) → False


(보안을 느슨하게 하는 옵션이므로 사용은 충분히 신중하게.)

여기 의 기사등을 참고로 했습니다.
(↑이쪽의 기사에 걸려 있는 것보다 각 브라우저와도 순조롭게 움직인 인상입니다.뭔가 간과가 있는 것일지도 모릅니다)

(추기)
xhr로 돌아오는 문자열은 아무것도하지 않으면 유니 코드로 돌아옵니다.
SJIS 파일을 로드하는 경우
xhr.overrideMimeType("text/plain; charset=Shift_JIS");
그러면 SJIS로 돌아옵니다.
(그러나 Edge는 항상 유니 코드로 돌아옵니다 ... 어려움)

좋은 웹페이지 즐겨찾기