Как вызвать функцию js при изменении внешнего значения? - PullRequest
0 голосов
/ 02 мая 2020

Итак, я пытаюсь изменить, например, текст абзаца при изменении файла .txt. Я уже мог добиться этого, вызывая функцию js каждые 500 мс и проверяя файл .txt. Но это привело к очень заметной задержке. Я действительно не знаю причину этого, потому что функция вызывается несколько раз, прежде чем текст в абзаце изменяется. Если бы я вызывал функцию с событием onclick, задержки вообще не было. Так как же мне сделать это, не нажимая кнопку внутри самой веб-страницы? Это также может быть кнопка в другой программе, которая вызывает функцию в js ...

HTML, которую я сейчас использую:

<!DOCTYPE html>
    <script src="get.js"></script>
    <html>
        <body onload="startget('read.txt', 'put')">
            <p id="put">before</p>
            <p id="counter">Function runs for the 0th time</p>
        </body>
    </html>

JS с большой задержкой :

var getfile;
var putelement;
var allText;
var count = 0;

function startget(file, elementid) {
  setInterval(allscr, 500) //used to call the function allscr every 500ms
  getfile = file;
  putelement = elementid;
}

function allscr() {
  count += 1;
  document.getElementById("counter").textContent = "Function runs for the " + count + "th time";
  var txtFile = new XMLHttpRequest();
  txtFile.onreadystatechange = function() {
    if (txtFile.readyState === XMLHttpRequest.DONE && txtFile.status == 200) {
      allText = txtFile.responseText;
    }

    document.getElementById(putelement).textContent = allText;
  }
  txtFile.open("GET", getfile, true);
  txtFile.send(null);
}

Скрипт устанавливает текст абзаца 'put' равным .txt файлу 'read.txt'. И в счетчике вы можете увидеть, сколько раз была вызвана функция allscr (). Иногда может потребоваться 8 раз, пока он не изменит абзац после изменения файла .txt. В других случаях это будет почти мгновенно. Поскольку при подключении allscr () к кнопке нет задержки, я предполагаю, что есть проблема с очень быстрым запросом XMLHttpRequest. (Кстати, я пытаюсь создать исходный код браузера для obs, который я легко могу изменить, нажав кнопку в другой программе, потому что вы не можете взаимодействовать с браузером внутри obs)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...