Пара багов



  • Столкнулся с парой багов в процессе разработки. Хотя может это и не баги, а так задумано.

    в OnApplicationStart добавлена секция "выполнить код", в ней есть примерно такой код:

    function BASExtended() {

    }

    BASExtended.prototype.runJS = function (script_text, callback) {
    page().script(script_text, function () {
    log('runJS callback');
    callback(_result());
    });
    };

    var BE = new BASExtended();

    Первое - в режиме записи переменная BE доступна и все работает. В обычном режиме ошибка, что переменная не определена.

    Второе - при вызове BASExtended.prototype.runJS в него передается callback, но в коллбэке page().script он не видит переменную callback (после log), хотя вот же она, передана в качестве параметра. В логе ошибка
    ReferenceError: Can't find variable: callback Номер строки:3 Во время выполнения скрипта log('runJS callback'); callback(_result());

    Может, я что-то не так делаю, или это ошибка в софте?



  • @blackhacker Я не знаю в этом ли проблема, но у меня был похожий баг, когда в режиме записи работает, а при запуске ошибки. У меня этого возникало, когда я в качестве выражения match для поиска элемента выбирал строки с тегами <>. И короче такая ситуация возникала, что при запуске эти теги как то там не экранировались и ошибки лезли. Может тоже ты в Выполнить какие-нибудь строки с тегами прописывал..



  • @lev Нет, строки с тегами не прописывал



  • This post is deleted!


  • @blackhacker

    Первое - в режиме записи переменная BE доступна и все работает. В обычном режиме ошибка, что переменная не определена.

    Так и задумано. Вызывайте "выполнить код" в начале работы потока.

    Второе - при вызове BASExtended.prototype.runJS в него передается callback, но в коллбэке page().script он не видит переменную callback

    callback нужно передавать через глобальную переменную.

    0_1479470229770_runJS.xml

    Вот так, но будет работать только в режиме запуска.



  • @support Не совсем понял про начало потока.Код вроде и так вызывался в начале потока, перед тем, как я вызывал нужную функцию.

    А чем отличается режим записи и запуска? Почему код работает в них по-разному?



  • @blackhacker

    Не совсем понял про начало потока.Код вроде и так вызывался в начале потока, перед тем, как я вызывал нужную функцию.

    Начало потока: http://prnt.sc/d9zvpq

    А чем отличается режим записи и запуска? Почему код работает в них по-разному?

    Потому что в режиме записи доступен только однопоток, а в режиме запуска несколько. Перенести контекст и состояние браузера с одного потока в несколько тяжело и не нужно, вам достаточно вызвать код не в OnApplicationStart а в начале работы потока.


Log in to reply
 

  • 29
  • 16
  • 3
  • 5
  • 2
  • 4
  • 1