Ответ на самом деле нет, нет.
НО есть некоторые обходные пути, в зависимости от того, что вы можете уйти с (поддерживаемыми браузерами и т.д.)
Когда вы захватить локальный файл (я предполагаю, что вы используете <input type="file">
, а чем частично поддерживаемые, нестандартные методы), вы получаете событие "change"
для подписки, но это изменение отражает изменение выбранных файлов, а не изменение содержимого конкретного файла.
Перемещение за пределы этого, если у вас есть Blob
или File
, который наследуется от Blob
, у вас в основном есть буфер, полный данных.
Этот буфер не будет динамически обновлять себя, основываясь на изменениях в других местах ОС и не поддерживает параметры обратного вызова для этого.
В качестве альтернативы, из блоба или файла вы можете использовать URL.createObjectURL(file)
, который возвращает временный url, который ссылается на файл, а не на содержимое файла.
Таким образом, любое изменение этого файла может быть затем отражено от последующих вызовов к этому URI.
Это еще не что-то, что я создал для тестирования.
Не было бы обратного вызова; однако вы можете настроить интервальное биение, сделать вызов XHR для этого URI, а затем сравнить .responseText
с предыдущими .responseText
.
Опять же, никаких гарантий, но это так близко, что я думаю, что вы собираетесь получить ответ прямо сейчас (пока еще в сфере плагинов/бесплатных решений), и может стоить всего час разработки прототипа и еще несколько тестов, поддержка тестирования (независимо от того, является ли ссылка живым, а не исходным представлением и т. д.).
var input = document.querySelector("input[type='file']"), // client must open file, themselves
fileHandle = "", // this will be the url for the local file
content = "", // this will be the latest contents of the file
previousContent = ""; // this will be the previous contents
var ms = 1000,
secs = 2,
pollId; // will be the process ID for the polling (so you can stop checking for changes, later).
// wait for a file to be selected
input.addEventListener("change", function (evt) {
var file = evt.target.files[0]; // grab the file object
fileHandle = URL.createObjectURL(file); // create a url which points to the local file
// create an interval to check for changes
pollId = setInterval(
getLatest(fileHandle, getCurrent, updateCurrent),
secs * ms
);
});
function updateCurrent (latest) {
current = latest;
doStuff(current);
// the text has changed; it's been updated;
// now call home or do something else
}
function getCurrent() { return current; }
function getLatest (url, getCurrent, onchange) {
return function() {
// this isn't actually calling the network
// it's calling the local file
var xhr = new XMLHttpRequest();
xhr.open("GET", url);
xhr.onload = function() {
var latest = xhr.responseText;
if (getCurrent() !== latest) { onchange(latest); }
};
xhr.send();
};
}
У вас теперь есть опрос изменений в поддерживающих браузерах.
Возможно, вы найдете ответ, выполнив поиск старых страниц переполнения стека –
Да, вы можете использовать AJAX. –
локальный файл в клиентской машине? разве это не угроза безопасности? – mithunsatheesh