Как загрузить статический локальный текст / файл данных исходного кода, необходимый для инициализации веб-страницы в javascript - PullRequest
0 голосов
/ 27 октября 2019

Я пытаюсь найти надежный способ загрузки исходного кода шейдера GLSL RayTracer.glslf из файла, который находится в том же каталоге, что и index.html, для моего простого приложения визуализации WebGL.

Iпоследовал некоторые предыдущие ответы от переполнения стека. Я уверен, что 2 года назад они работали. Но теперь они почему-то перестали работать.

Я попробовал 3 варианта: 1) fetch работает, остальные 2) <object data="RayTracer.glslf"> и 3) <iframe id="txtRayTracer"> не работает.

Проблема с fetch заключается в том, что он работает только тогда, когда файлы размещаются на веб-сервере, но я хочу что-то, что также работает, когда я просто дважды щелкаю по index.html с моего локального диска без запуска веб-сервера.

Сокращенный код выглядит следующим образом:

<script> 
"use strict";

var str_rayTracer = "//RayTracerPlaceholder";

async function loadPage(){

    // --- alternative 1
    // This works when I run web-server  http://127.0.0.1:5500/ThreeJS/GLSL_CSG/RayTracePrimitives/index.html 
    // but not from local file           file:///home/prokop/git/LearnWeb/ThreeJS/GLSL_CSG/RayTracePrimitives/index.html
    //str_rayTracer  = await fetch('RayTracer.glslf' ).then( r => r.text() );

    // --- alternative 2
    // This should work with  <object data="RayTracer.glslf"  id="txtRayTracer">
    //str_rayTracer  = document.getElementById("txtRayTracer").contentDocument.body.childNodes[0].innerHTML;

    // --- alternative 3
    // This should work with <iframe id="txtRayTracer" style="display:none" src="RayTracer.glslf" >
    str_rayTracer  = document.getElementById("txtRayTracer").contentDocument.body.innerText;

    console.log( " HEY " );
    console.log( str_rayTracer );
    console.log( " HEY HEY " );
}
</script>

    <body onLoad="loadPage()">
        <div style="width: 640px;height: 480px;" id="GLScreen"></div>
        <div style="width: 1200px;">
            Scene Source    </BR> <textarea id="txtScene" cols="40" rows="5" onChange="selectScene(this)">//Empty </textarea></BR> 
            <!-- RayTracer.glslf </BR> <object data="RayTracer.glslf"  id="txtRayTracer"></object> </BR> -->
            RayTracer.glslf  </BR> <iframe id="txtRayTracer" style="display:none" src="RayTracer.glslf" ></iframe></BR> 
        </div>
    </body>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...