Javascript-форум (https://javascript.ru/forum/)
-   Internet Explorer (https://javascript.ru/forum/css-html-internet-explorer/)
-   -   Код то работает, то нет - как так ? (https://javascript.ru/forum/css-html-internet-explorer/80001-kod-rabotaet-net-kak-tak.html)

spin 16.04.2020 13:15

Код то работает, то нет - как так ?
 
есть вот такой код (см ниже)
main висит на кнопке submit

так вот, иногда всё работает как надо,
иногда просто ничего не происходит при нажатии кнопки,
только поля формы очищаются

в логе пусто, никаких ошибок нет
при этом, как назло, если открыта консоль, то практически всегда работает.
а если нет, то не работает минимум в половине случаев.

браузер IE 11

подскажите плиз, в чем может быть дело, куда копать ?

function WriteFile(fileObj) {
  const filePath = "C:\\__WORK\\";
//  const fileName = "doc.txt";

  console.log("write file");

  var fso = new ActiveXObject("Scripting.FileSystemObject");

  var filename = filePath + fileObj.name;

  var FilePointer = fso.OpenTextFile(filename, 8, true);

  FilePointer.Write( fileObj.data );
  FilePointer.Close();

};

function send(filename, docid, keyname, storename) { 
  var url = "http://127.0.0.1/test?"+
              "filename="+encodeURIComponent(filename);
  window.open(url, "_blank");
}

function main() {
  const selectedFile = document.getElementById('inputfile').files[0];

  var writerFunc = WriteFile;
  var sendFunc   = send;

  const reader = new FileReader();

  reader.onload = function() {
    var file = new Object();
    file.name = selectedFile.name;
    file.data = reader.result;
    writerFunc(file);
    sendFunc(file.name);
  };
  reader.readAsArrayBuffer(selectedFile);

};

voraa 16.04.2020 13:42

Цитата:

Сообщение от spin (Сообщение 522864)
есть вот такой код (см ниже)
main висит на кнопке submit

так вот, иногда всё работает как надо,
иногда просто ничего не происходит при нажатии кнопки,
только поля формы очищаются

в логе пусто, никаких ошибок нет
при этом, как назло, если открыта консоль, то практически всегда работает.
а если нет, то не работает минимум в половине случаев.

браузер IE 11

Понаставьте console.log в разных местах.
Попробуйте понять, что происходит, когда ничего не происходит.

spin 17.04.2020 16:07

Цитата:

Сообщение от voraa (Сообщение 522868)
Понаставьте console.log в разных местах.
Попробуйте понять, что происходит, когда ничего не происходит.

не срабатывает даже в самом начале

поставил вот так
function main() {
  console.log("main");
//....


в консоли пусто :(

сам HTML вот

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>test</title>
</head>
<body>
    <form onsubmit="main()">
        <div><input type="file" id="inputfile"></div>
        <br/>
        <div>DocId: <input type="text" id="docid" size="100"></div>
        <br/>
        <div><input type="submit" value="Send"></div>
    </form>
    <div id="result"></div>
</body>
</html>
<script type="text/javascript" src="./scripts/test.js"></script>

laimas 17.04.2020 16:21

spin,
а что это? Ведь такое в веб странице будет работать только с разрешения.

voraa 17.04.2020 19:52

Дело в том, выход из функции main происходит раньше, чем отработает загрузка файла. После этого происходит "отправка" формы. Так как action не указан, то просто происходит перезагрузка страницы.
Нужно ev.preventDefault() или return false в main.
У меня нет ИЕ сейчас, но вот так все работает до new ActiveXObject("Scripting.FileSystemObject");

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>test</title>
<script>
function WriteFile(fileObj) {
  const filePath = "C:\\__WORK\\";
//  const fileName = "doc.txt";
 
  console.log("write file");
 
  var fso = new ActiveXObject("Scripting.FileSystemObject");
 
  var filename = filePath + fileObj.name;
 
  var FilePointer = fso.OpenTextFile(filename, 8, true);
 
  FilePointer.Write( fileObj.data );
  FilePointer.Close();
 
};
 
function send(filename, docid, keyname, storename) {
  var url = "http://127.0.0.1/test?"+
              "filename="+encodeURIComponent(filename);
  window.open(url, "_blank");
}
 
function main(ev) {
  var selectedFile = document.getElementById('inputfile').files[0];
  var writerFunc = WriteFile;
  var sendFunc   = send;
 
  ev.preventDefault()
  const reader = new FileReader();
 
  reader.onload = function() {
    var file = new Object();
    file.name = selectedFile.name;
    file.data = reader.result;
    writerFunc(file);
    sendFunc(file.name);
  };
  reader.readAsArrayBuffer(selectedFile);
 
};

document.addEventListener('DOMContentLoaded', () => {
	document.querySelector('form').addEventListener('submit', main)
})

</script>
</head>
<body>
    <form>
        <div><input type="file" id="inputfile"></div>
        <br/>
        <div>DocId: <input type="text" id="docid" size="100"></div>
        <br/>
        <div><input type="submit" value="Send"></div>
    </form>
    <div id="result"></div>
</body>
</html>

spin 18.04.2020 09:56

Цитата:

Сообщение от voraa (Сообщение 522973)
Дело в том, выход из функции main происходит раньше, чем отработает загрузка файла.

не знаю, не знаю....

я же ставил в самом начале main
console.log
и он не отрабатывал

как вы пишите попробовал, тоже не заработало

т.е. до preventDefault просто не доходит

сделал без submit и формы
всё сразу работает с первого раза

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<title>test</title>
</head>
<body>
    <div><input type="file" id="inputfile"></div>
    <br/>
    <div>DocId: <input type="text" id="docid" size="100"></div>
    <br/>
    <button onClick="main()">Send</>
    <div id="result"></div>
</body>
</html>
<script type="text/javascript" src="./scripts/test.js"></script>


странности какие-то

voraa 18.04.2020 12:39

Цитата:

Сообщение от spin (Сообщение 522984)
не знаю, не знаю....

я же ставил в самом начале main
console.log
и он не отрабатывал

как вы пишите попробовал, тоже не заработало

т.е. до preventDefault просто не доходит

Я совсем забыл, что в ИЕ нет стрелочных фунций. Давно похоронил его.
Тогда строку 49 в моем коде
document.addEventListener('DOMContentLoaded', () => {

Заменить на
document.addEventListener('DOMContentLoaded', function () {


Часовой пояс GMT +3, время: 16:57.