Итак, я пытаюсь изменить, например, текст абзаца при изменении файла .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)