@bdadabum Тыкаешь на нужный элемент. В выпадающем меню тыкаешь на "Выполнить javascript на элементе". В поле для скрипта пишешь:
self.remove()Выполнить код из переменной
-
Версия программы 25.2.1
Сначала пытался выполнять код сразу в действии "Шаблон" - но понял, что там код не выполняет.
Создал код и опробовал его в действии Выполнить Код:
if ([[GIGAPETA]]){ [[KOD_RESULT3]] += [[GIGAPETA]]; if ([[TURBO]] || [[K2S]]){ [[KOD_RESULT3]] += "\r\n\r\n"; } } if ([[TURBO]]){ [[KOD_RESULT3]] += [[TURBO]]+"\r\n\r\n"+[[HITFILE]]; if ([[K2S]]){ [[KOD_RESULT3]] += "\r\n\r\n"; } }Всё прекрасно работает.
Запихал данный код в переменную [[KOD]] и попробовал выполнить его из переменной:Пробовал так:
[[KOD]]Потом так:
eval([[KOD]])И так:
var [[KOD_RESULT]] = ""; eval([[KOD]])Результат нулевой. Полез по форуму искать и, исходя из найденого, пришёл к предположению, что из переменной выполнить код невозможно...
Верно ли моё предположение: Из переменной код выполнить нельзя?
Если нельзя - тогда у меня есть одно утверждение и два вопроса:
Утверждение: Я всё больше прихожу в недоумение от подхода к созданию программы - очень нужные и простые в реализации вещи игнорируются, в то время как усилия направляются на реализацию модных "свистоперделок"...
Для реализации выполнения кода из переменной нужно всего три действия - добавить "галку" (код из переменной) (либо "синтксис" типа ??[[KOD]]??), проверку этого дела и вставку текста из переменной - всё - дальше всё работает как обычно.1 вопрос: Возможно ли реализовать своими руками указанные в утверждении действия? Делал ли кто-нибудь такой "костыль"?
2 вопрос: Можно ли как-то иначе выполнять код из переменной? Возможно с помощью Node?
P.S. Костыли обхода я придумал (10 действий вместо одного) - но костыли не являются решением.
Нужно мне это для автоматического формирования шаблона под каждый сайт, которых может быть любое колличество, изходя из условий каждого сайта.
Код приведён в сокращённом виде.
Код из переменной - это фактически создание и использование любых своих функций в "пару кликов". -
@LCFSCS said in Выполнить код из переменной:
Верно ли моё предположение: Из переменной код выполнить нельзя?
Нет, не верно. Проблема в том, что вы не знаете JavaScript и ищите виноватых
[[CODE]] = 'var codeResult = 1 + 1' eval([[CODE]]) [[CODE_RESULT]] = codeResult log([[CODE_RESULT]]) -
Я не знаю JavaScript - я только учусь
Пока знаю только PHPЕсли бы Вы внимательно прочли, то поняли из чего я пришёл к своему предположению: из собственного опыта попыток выполнить код, лежащий в переменной и поиска по форуму по данному вопросу.
А если содержимое (сам код) будет лежать действительно в переменной (вне действия Выполнить Код), выполнится ли такое действие?
Напишите пожалуйста код, в котором содержимое переменной [[CODE]] не находится в коде действия, а находится в переменной программы.Переменная эта содаётся автоматом и код в неё берётся из ячейки екселя - можем мы выполнить код из данной переменной?
-
Да вот такая разница:
Вот так не работает eval([[KOD]]) - хотя должно
Функция eval действительно выполняет код, но строка с кодом не приходит в нашу функцию eval(а тут пусто получается!!!)Вот в чём разница - код не подставляется из "внешней переменной" (которая вне текущего кода - в переменных программы сидит)
-
@UserTrue
Значит Вы признаёте свою неправоту, ибо ответы с посылом учить язык, строить гараж, растить детей и т.д. являются съездом с темы.Сами попробуйте написать любой код в переменную программы, а потом вызвать выполнение этого кода в действии Выполнить Код. Если сработает - кидайте ваш код. Я вот пол дня извращался (вплоть до 1 + 1) - результат нулевой (это я три варианта для примера привёл - а так я наверное все варианты перебрал)...
-
@LCFSCS said in Выполнить код из переменной:
@UserTrue
Значит Вы признаёте свою неправоту, ибо ответы с посылом учить язык, строить гараж, растить детей и т.д. являются съездом с темы.Сами попробуйте написать любой код в переменную программы, а потом вызвать выполнение этого кода в действии Выполнить Код. Если сработает - кидайте ваш код. Я вот пол дня извращался (вплоть до 1 + 1) - результат нулевой (это я три варианта для примера привёл - а так я наверное все варианты перебрал)...
Он как раз и скинул сверху вариант. Вам нужно учить не полностью язык, а только конкатенацию строк, что бы eval() сработал правильно. Действие "Шаблон" может преобразовать ваш код в строку для eval(), но вы используете переменные для записи результата, значит какие то переменные не нужно преобразовывать.
Вам проще будет использовать функцию вместо eval():
[[FUNC]] = function(){ if(typeof([[GIGAPETA]]) == "undefined") [[GIGAPETA]] = ""; if(typeof([[KOD_RESULT3]]) == "undefined") [[KOD_RESULT3]] = ""; if(typeof([[TURBO]]) == "undefined") [[TURBO]] = ""; if(typeof([[K2S]]) == "undefined") [[K2S]] = ""; if(typeof([[HITFILE]]) == "undefined") [[HITFILE]] = ""; if ([[GIGAPETA]]){ [[KOD_RESULT3]] += [[GIGAPETA]]; if ([[TURBO]] || [[K2S]]){ [[KOD_RESULT3]] += "\r\n\r\n"; } } if ([[TURBO]]){ [[KOD_RESULT3]] += [[TURBO]]+"\r\n\r\n"+[[HITFILE]]; if ([[K2S]]){ [[KOD_RESULT3]] += "\r\n\r\n"; } } }Вызов [[FUNC]]() с типом данных
expression -
Проблема в том, что вы лезете под капот не зная языка, а потом ругаетесь, что у вас не получается. Причём виноват почему то BAS, а не javascript... Попробуйте использовать переменные js вместо переменных BAS и у вас тоже ни чего не получится.
Самым простым способом было бы создание этой простой конструкции условий кубиками BAS. А что бы это всё занимало меньше места, можно кубик свернуть. Либо поместить все кубики в функцию и вызывать уже её.
-
@LCFSCS said in Выполнить код из переменной:
Утверждение: Я всё больше прихожу в недоумение от подхода к созданию программы - очень нужные и простые в реализации вещи игнорируются, в то время как усилия направляются на реализацию модных "свистоперделок"...
Для реализации выполнения кода из переменной нужно всего три действия - добавить "галку" (код из переменной) (либо "синтксис" типа ??[[KOD]]??), проверку этого дела и вставку текста из переменной - всё - дальше всё работает как обычно.Выполнение кода из переменной является дурным тоном (читай говнокод) и программисты javascript настоятельно рекомендуют не использовать eval() из за возможных проблем с безопасностью и отладкой.
Однако BAS позволяет реализовать и использовать любой модуль, в том числе и замену стандартных. То есть вы можете сами реализовать функцию BAS, которая бы получала код из строки, экранировала нужные переменные и выполняла результат. Затем эту функцию вы бы могли экспортировать в модуль и использовать одним новым действием BAS
-
Спасибо, Fox.
Про создать свою функцию - это замечательно, только этому нужно научиться. Только я неделю BAS пользую и две недели как начал JS изучать (из-за BAS'а в основном).
Прикрутить бы к стандартному модулю (если это возможно) Выполнить Код возможность взятия кода из переменной (тупо "копировать-вставить")...
Что и вызывает недоумение - что настолько удобное и простое в реализации действие не сделано, ведь практически во всех модулях реализован этот принцип ("копировать-вставить" - взять из переменной).
Исходя из данного принципа у меня сформировался подход к работе с программой и отступление от данного приципа в конкретной ситуации (хотя логически и в этой ситуации он просто необходим) меня и огорчило.С функцией не получится, так как код каждый раз разный и тут мне проще использовать придуманые костыли (добавление ещё одного условия - проверку необходимости конкретного обменника, который буду брать из екселя и набивать переменные).
Набиваю проверочные переменные (*_TEST) и просто выполняю один код не из переменной.
if ([[GIGAPETA]] && [[GIGAPETA_TEST]]){ [[KOD_RESULT3]] += [[GIGAPETA]]; if ([[TURBO]] && [[TURBO_TEST]] || [[K2S]] && [[K2S_TEST]]){ [[KOD_RESULT3]] += "\r\n\r\n"; } } if ([[TURBO]] && [[TURBO_TEST]]){ [[KOD_RESULT3]] += [[TURBO]]+"\r\n\r\n"+[[HITFILE]]; if ([[K2S]] && [[K2S_TEST]]){ [[KOD_RESULT3]] += "\r\n\r\n"; } } }Просто думал, что можно проще (типа копирать-вставить) - я фанат простоты и оптимизации
Про дурной тон - это да, но порой это самый верный вариант - как в моём случае: обменники могут быть любые, шаблон сайта любой, оформление любое - вот и хотел это всё генерировать на лету, а без кода из строки никак иначе быстро и красиво не получается - придётся огород городить (проверять шаблон обенников, создавать переменные для каждой проверки, проверять результат проверки).
Ещё раз спасибо.
-
@LCFSCS said in Выполнить код из переменной:
Спасибо, Fox.
Про создать свою функцию - это замечательно, только этому нужно научиться. Только я неделю BAS пользую и две недели как начал JS изучать (из-за BAS'а в основном).
Можете начать изучение с просмотра роликов с официального ютуб канала https://www.youtube.com/@browserautomationstudio3109/videos
Прикрутить бы к стандартному модулю (если это возможно) Выполнить Код возможность взятия кода из переменной (тупо "копировать-вставить")...
Как понять "взятия кода из переменной" ?
Что и вызывает недоумение - что настолько удобное и простое в реализации действие не сделано, ведь практически во всех модулях реализован этот принцип ("копировать-вставить" - взять из переменной).
Исходя из данного принципа у меня сформировался подход к работе с программой и отступление от данного приципа в конкретной ситуации (хотя логически и в этой ситуации он просто необходим) меня и огорчило.Судя по всему, вы привыкли работать по другому и не хотите переучиваться работать по новому. Это как хотеть приделать педали в автомобиль так, что бы их можно было крутить, как на велосипеде, потому что привыкли ездить на велосипеде..
С функцией не получится, так как код каждый раз разный и тут мне проще использовать придуманые костыли (добавление ещё одного условия - проверку необходимости конкретного обменника, который буду брать из екселя и набивать переменные).
Вы используете те знания, которыми обладаете. Ранее вы не использовали функции, но почему то сейчас считаете, что их использовать не получится
Набиваю проверочные переменные (*_TEST) и просто выполняю один код не из переменной.
if ([[GIGAPETA]] && [[GIGAPETA_TEST]]){ [[KOD_RESULT3]] += [[GIGAPETA]]; if ([[TURBO]] && [[TURBO_TEST]] || [[K2S]] && [[K2S_TEST]]){ [[KOD_RESULT3]] += "\r\n\r\n"; } } if ([[TURBO]] && [[TURBO_TEST]]){ [[KOD_RESULT3]] += [[TURBO]]+"\r\n\r\n"+[[HITFILE]]; if ([[K2S]] && [[K2S_TEST]]){ [[KOD_RESULT3]] += "\r\n\r\n"; } } }Если вам так удобнее - флаг вам в руки. Создайте свой враппер над BAS, который бы брал код из других мест и выполнялся. Но я очень сильно сомневаюсь, что это ускорит разработку и отладку итогового скрипта
Просто думал, что можно проще (типа копирать-вставить) - я фанат простоты и оптимизации
Создавать скрипт кубиками не залезая под капот в js - вот простота и оптимизация
Про дурной тон - это да, но порой это самый верный вариант - как в моём случае: обменники могут быть любые, шаблон сайта любой, оформление любое - вот и хотел это всё генерировать на лету, а без кода из строки никак иначе быстро и красиво не получается - придётся огород городить (проверять шаблон обенников, создавать переменные для каждой проверки, проверять результат проверки).
Всё генерировать на лету? Вы вкурсе, что eval() не выполнит методы api BAS? То есть полноценно написать шаблон действий отдельно от BAS не получится.
Я один фиг не понимаю, как может код из строки, взятый из экселя поменять логику работы браузерного скрипта для абсолютно разных сайтов? Что бы при этом править такие костыли было проще и быстрее, чем писать нормальный, человеческий шаблон в BAS
-
@LCFSCS Извиняйте, но тут не кто и не нанимался Учить кого то и Раскрывать свои Фишки.
Скок тот же Фокс говорил, что здесь помогают чисто кому не в падел мо и своё свободное Время.А Усер то он Реал Умный а вы зря его не слушаете.
Они меня и Фокс считай и научили не задавать Глупых Вопросов :)))
А уметь и самому находить что я и делаю какой год и Норм всё.Нах венить кого то и думать что вам все и вся Должны и Обязаны.
Это Сообщество а не Поддержка!