Пара багов
-
Столкнулся с парой багов в процессе разработки. Хотя может это и не баги, а так задумано.
в 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!
-
Первое - в режиме записи переменная BE доступна и все работает. В обычном режиме ошибка, что переменная не определена.
Так и задумано. Вызывайте "выполнить код" в начале работы потока.
Второе - при вызове BASExtended.prototype.runJS в него передается callback, но в коллбэке page().script он не видит переменную callback
callback нужно передавать через глобальную переменную.
Вот так, но будет работать только в режиме запуска.
-
@support Не совсем понял про начало потока.Код вроде и так вызывался в начале потока, перед тем, как я вызывал нужную функцию.
А чем отличается режим записи и запуска? Почему код работает в них по-разному?
-
Не совсем понял про начало потока.Код вроде и так вызывался в начале потока, перед тем, как я вызывал нужную функцию.
Начало потока: http://prnt.sc/d9zvpq
А чем отличается режим записи и запуска? Почему код работает в них по-разному?
Потому что в режиме записи доступен только однопоток, а в режиме запуска несколько. Перенести контекст и состояние браузера с одного потока в несколько тяжело и не нужно, вам достаточно вызвать код не в OnApplicationStart а в начале работы потока.