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