Удалённо реле неправильно работают в браузере IE11

Тема в разделе "Arduino & Shields", создана пользователем fed180, 25 ноя 2018.

  1. fed180

    fed180 Нуб

    Привет всем. Новичок в Ардуино. Хочу удалённо управлять домом.
    Ардуино УНО.
    Написан скетч управление 6 реле через Веб браузер. Стоит шилд W5100. Страница ВЕБ написана отдельно в SD карте файлом HTM файле. SD стоит на шилде W5100.
    В Google Chrome все реле через Веб страницу управляются нормально.
    Но если открыть ВЕБ страницу через браузер IE 11( все обновления)WIN7, то происходит следующее:
    можно нажать на любую кнопку реле. Реле включится. А вот далее выключить реле нельзя. Надо закрыть браузер и открыть снова. Тогда можно выключить реле. И на оборот. Т.е. с каждой кнопкой можно сделать действие только 1 раз. Далее закрыть и опять открыть браузер IE11.
    В браузере Google Chrome всё работает нормально. Реле можно и вкл. и выключить.
    Что можно сделать для браузера IE11??????
    Библиотека #include <Ethernet.h> стандартная.
    Могу выложить скетч, но наверно дело не в нём.
    А в чём?????
     
  2. Asper Daffy

    Asper Daffy Иксперд

    В нм, в нём! Ну или в браузере, но лучше решать со стороны скетча. Скорее всего страницы просто жёстко кешируются. Решений 2 - выключить это в браузере, или добавить в URL (во все, какие есть) левый параметр - случайное число. Браузер будет считать это другой страницей и будет честно грузить. Второе - лучше.
     
    arkadyf нравится это.
  3. fed180

    fed180 Нуб

    а как со стороны скетча?
     
  4. fed180

    fed180 Нуб

    Да. Так и есть. Попробовал каждый раз удалять кэш, после нажатия кнопки, не закрывая страницу браузера, и на кнопку можно нажимать ещё один раз.
    не понял, как это?
     
  5. fed180

    fed180 Нуб

    Смотрите.
    В HTML файле прописано, что бы кеш не сохранялся (10 строка)


    <html>
    <head>
    <meta http-equiv='content-type' content='text/html; charset=UTF-8'>
    <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
    <title>ARDUINO</title>
    <link type="text/css" rel="StyleSheet" href="/my.css" />
    <script>
    function GetFlameState() {

    nocache = "&nocache=" + Math.random() * 1000000;

    var request = new XMLHttpRequest();
    request.onreadystatechange = function() {
    if (this.readyState == 4) {
    if (this.status == 200) {
    if (this.responseText != null) {
    var arrayOfStrings = this.responseText.split(":");
    document.getElementById("t1_txt").innerHTML = arrayOfStrings[0];
    document.getElementById("t2_txt").innerHTML = arrayOfStrings[1];
    document.getElementById("t3_txt").innerHTML = arrayOfStrings[2];
    document.getElementById("t4_txt").innerHTML = arrayOfStrings[3];
    document.getElementById("t5_txt").innerHTML = arrayOfStrings[4];
    for(var i = 1 ; i < 8 ; i++)
    if(arrayOfStrings[4+i] == "1")
    document.getElementById("led_"+i).setAttribute("class","button_enabled");
    else
    document.getElementById("led_"+i).setAttribute("class","button_disabled");
    }
    }
    }
    }
    request.open("GET", "ajax_flame" + nocache, true);
    request.send(null);
    setTimeout('GetFlameState()', 1000);
    }
    function onClick(pin){
    var request = new XMLHttpRequest();
    request.open("GET", "\sp?p=" + pin +"&"+ document.forms['form1'].cw_txt.value, false);
    request.send(null);
    }
    </script>

    /head>
    <body onload="GetFlameState()">
    <div class="form">
    <form name="form1" method="GET">
    <table align="center">
    <tr>
    <td colspan="2"><input name="cw_txt" type="text" size="10" style="font-size: 100px;"> </td>
    </tr>

    и т.д.

    И в Chroome это выполняется.(вот Скрин Шот с Chroome) левый столбец. Раз в секунду.

    А IE11 не выполняет эту команду. nocache = "&nocache=" + Math.random() * 1000000;
    Может надо какую то другую написать????
     

    Вложения:

  6. Вы в запрос просто добавляете какой то параметр с именем nocache и со случайным значением, с таким же успехом можно было использовать другое имя, например rnd. Похоже дело не в кеше, посмотрите какое урло получается ajax_flame&nocache=…
    неожиданное появление разделителя параметров '&' вместо разделителя запроса '?', смотрим рфц2616, раздел 3.2.2 http URL
     
    arkadyf нравится это.
  7. fed180

    fed180 Нуб

    Вот что выдаёт IE11, если включить средство разработчика поF12
    Выкладываю 2 скрин шот.
    Интересно. Если включить в IE11 средство разработчика, то всё начинает работать правильно и кнопки включаются и отключаются. А если по F12 закрыть, то опять та-же проблема.
     

    Вложения:

    Последнее редактирование: 25 ноя 2018
  8. fed180

    fed180 Нуб

    Вот такие URL. Это когда средство разработчика закрыто и кнопки давятся неправильно.
    http://192.168.1.52:262/ajax_flame&nocache=102669.18241579704
    http://192.168.1.52:262/ajax_flame&nocache=202792.63701419643
    http://192.168.1.52:262/ajax_flame&nocache=237781.59735200938
    и т.д
     
  9. Может урло в порядок сначала привести в соответствии со стандартом? Поправили бы html файл. Вместо nocache = "&nocache=" для начала исправили бы на nocache = "?nocache=", а то вообще не понятно, какой запрос построить хотели. И если кэширование хотим отключить, то добавьте мета тег 'Cache-Control' в заголовок, типа
    <meta http-equiv="Cache-Control" content="no-cache">
     
    arkadyf нравится это.
  10. fed180

    fed180 Нуб

    Всё исправил.
    function GetFlameState() {
    nocache = "?nocache=" + Math.random() * 1000000;
    var request = new XMLHttpRequest();
    request.onreadystatechange = function()
    Строчку вставил в файл. Кеш на компе полностью почистил почистил.
    Заодно и реестр прогой RegOrganizer
    Результата нет.
    Если включить в IE11 средство разработчика, то всё начинает работать правильно и кнопки включаются и отключаются. А если по F12 закрыть, то опять та-же проблема.
    Всё как было, так и осталось. Чего можно сделать?
    Может тут чего
    request.open("GET", "ajax_flame" + nocache, true);
    request.send(null);
    setTimeout('GetFlameState()', 1000);
    }
    function onClick(pin){
    var request = new XMLHttpRequest();
    request.open("GET", "\sp?p=" + pin +"&"+ document.forms['form1'].cw_txt.value, false);
    request.send(null);
    }
     
  11. fed180

    fed180 Нуб

    Вот полный текст.

    <html>

    <meta http-equiv="Cache-Control" content="no-cache">

    <head>
    <meta http-equiv='content-type' content='text/html; charset=UTF-8'>
    <link rel="shortcut icon" href="/favicon.ico" type="image/x-icon">
    <title>ARDUINO</title>
    <link type="text/css" rel="StyleSheet" href="/my.css" />
    <script>
    function GetFlameState() {
    nocache = "?nocache=" + Math.random() * 1000000;
    var request = new XMLHttpRequest();
    request.onreadystatechange = function() {
    if (this.readyState == 4) {
    if (this.status == 200) {
    if (this.responseText != null) {
    var arrayOfStrings = this.responseText.split(":");

    document.getElementById("t1_txt").innerHTML = arrayOfStrings[0];
    document.getElementById("t2_txt").innerHTML = arrayOfStrings[1];
    document.getElementById("t3_txt").innerHTML = arrayOfStrings[2];
    document.getElementById("t4_txt").innerHTML = arrayOfStrings[3];
    document.getElementById("t5_txt").innerHTML = arrayOfStrings[4];
    for(var i = 1 ; i < 8 ; i++)
    if(arrayOfStrings[4+i] == "1")
    document.getElementById("led_"+i).setAttribute("class","button_enabled");
    else
    document.getElementById("led_"+i).setAttribute("class","button_disabled");
    }
    }
    }
    }
    request.open("GET", "ajax_flame" + nocache, true);
    request.send(null);
    setTimeout('GetFlameState()', 1000);
    }
    function onClick(pin){
    var request = new XMLHttpRequest();
    request.open("GET", "\sp?p=" + pin +"&"+ document.forms['form1'].cw_txt.value, false);
    request.send(null);
    }
    </script>

    </head>

    <body onload="GetFlameState()">

    <div class="form">
    <form name="form1" method="GET">

    <table align="center">
    <tr>
    <td colspan="2"><input name="cw_txt" type="text" size="10" style="font-size: 100px;"> </td>
    </tr>
    <tr>
    <td><button type="button" id="led_1" class="button_disabled" onClick="onClick(1)">Печка1</button></td>
    <td><span id="t1_txt">1</span></td>
    </tr>

    <tr>
    <td><button type="button" id="led_2" class="button_disabled" onClick="onClick(2)">Печка2</button></td>
    <td><span id="t2_txt">2</span></td>
    </tr>

    <tr>
    <td><button type="button" id="led_3" class="button_disabled" onClick="onClick(3)">Свет</button></td>
    <td><span id="t3_txt">3</span></td>
    </tr>
    <tr>
    Может тут чего то???
     
  12. Asper Daffy

    Asper Daffy Иксперд

    Так у Вас ведь по кнопке не срабатывает! А в URL кнопки у Вас никакого рандома нету! В обработку кнопки и добавьте такой же финт со случайным параметром. А именно, в функцию

    function onClick(pin){
    var request = new XMLHttpRequest();
    request.open("GET", "\sp?p=" + pin +"&"+ document.forms['form1'].cw_txt.value, false);
    request.send(null);
    }
    вставьте вместо строки 3, что-нибудь типа

    request.open("GET", "\sp?lp="+Math.random()*10000+"&p=" + pin +"&"+ document.forms['form1'].cw_txt.value, false);

    Появится "левый" параметр lp и всё станет нормально. Ну, можете его тоже обозвать не lp, а nocache если хотите.
     
  13. parovoZZ

    parovoZZ Гуру

  14. Если onClick дохлый то и реле бы не включалось, а реле почему то включается, только статусы в GetFlameState не работают.
     
  15. Для чего делать метод блокирующим?
    Может IE ждет ответа, а его почему то нет.
     
  16. Оказывается в IE11, развитие которого прекращено в начале 2016, с кешированием
    XMLHttpRequest известная проблема, может не ждать когда её пофиксят и выбрать другой броузер?
     
  17. parovoZZ

    parovoZZ Гуру

    у них же edge вышел на замену.
     
  18. Asper Daffy

    Asper Daffy Иксперд

    Так вроде ж говорили, что включается только один раз? Вот я и думаю, что кешируется. Если всегда работает, так описывай внятнее что и как.
     
  19. fed180

    fed180 Нуб

    Спасибо, ВАМ, Asper Daffy.
    Исправил 3 строку, почти, как вы писали, и в IE 11 всё стало работать. Все кнопки и включаются и выключаются, и на оборот- и выключаются и включаются.
    Вот что получилось:
    function onClick(pin){
    var request = new XMLHttpRequest();
    request.open("GET", "\sp?p=" + pin +"&"+ document.forms['form1'].cw_txt.value + "&" + Math.random() * 1000000, false);
    request.send(null);
    Если написать, как писали Вы, то вообще ничего не работало:
    request.open("GET", "\sp?lp="+Math.random()*10000+"&p=" + pin +"&"+ document.forms['form1'].cw_txt.value, false);


    Другой браузер ЗАПРЕЩЕНО.
    Например на компах энергетической компании ТГК1(десятки тысяч компов) запрещено ставить любой браузер, кроме IE11.
    Да и например с IP видеокамерами HIKVISION c IE 11 намного проще работать. Поставил плагин, и всё.
    А с Chroome сложнее. Для него HIK наконец то выпустил плагигн, но действий по открытию IP камеры надо сделать больше.
    Да и в IE проще переносить ссылки с компа на комп.( для меня конкретно). И привычка. Это как жена.
    Пробовал несколько раз переходить на Chroome. Но никак.
    Ну в общем я ищу причины, что бы оставаться на IE.
     
    Последнее редактирование: 26 ноя 2018
  20. Asper Daffy

    Asper Daffy Иксперд

    Ну, главное, что ты идею понял и впредь будешь знать. А то, что разбор зависит от порядка параметров - немного напрягает, значит, разбор кривой :(