• Why WBK is not defined?

    tokmaganbet
    @tokmaganbet Автор вопроса
    Тех. поддержка помогла!

    6038f80d85497489544743.png

    Инструкция для интеграции с помощью функции sendCRMLead.
    Для отправки заявки с сайта в CRM необходимо вызвать функцию sendCrmLead.
    Вы можете самостоятельно интегрировать эту функцию на сайт или обратиться к нам. Для того, чтобы написать или позвонить нам, нажмите на кнопку “Поддержка” в левом нижнем углу кабинета.
    Если решите интегрировать самостоятельно или с помощью своего программиста, то вам поможет описание параметров:
    name - имя клиента, данные из этого параметра попадают в поле имя в карточке лида;
    email - электронная почта клиента, данные из этого параметра попадают в поле email в карточке лида;
    phone - телефон клиента, данные из этого параметра попадают в поле телефон в карточке лида. Форматировать телефон не обязательно мы сами приведём его к нужному формату;
    comment - примечание, данные из этого параметра попадают в поле примечание в карточке лида;

    Описание и пример скрипта

    sendCrmLead – Функция отправки заявок в CRM.
    name, phone, email, comment – Переменные в которых хранятся данные.
    Число 9701 – Это ID Вашей CRM.

    При отправке данных в CRM есть 4 системных поля – name, phone, email, comment.
    Также есть кастомные поля которые отправляются с помощью параметра –'values_custom': [{input_id: 67912, value: count}], где count – переменная, а число 67912 – id поля в CRM.

    Для того, чтобы корректно настроить интеграцию, Вам необходимо объявить переменные, где будут храниться данные с полей. К примеру, это должно выглядеть так:


    'inbox_type_id': 340653 – Тип входящего обращения для заявок.
    Для назначения ответственным сотрудника, необходимо передавать параметр - 'employee_id'
    Для назначения ответственным отдел, необходимо передавать параметр - 'department_id'

    Разберём срабатывание скрипта и переменную name. При нажатии на кнопку в форме на сайте [type="submit"] срабатывает событие click и выполняется функция, где по this в этой форме скрипт ищет идентификатор поля [name="name"] и записывает из него данные в переменную name.

    Для того чтобы в коде не возникало ошибок прописываем WBK !== 'undefined', это означает, что без кода наших виджетов эта функция не будет выполнена.
    Также делаем условие &&, что phone !== '' телефон не может быть пустой строкой, это предотвращает отправку пустых заявок с форм.

    При выполнении всех условий без ошибок, будет совершена отправка заявки в CRM.

    Все необходимые id полей и других параметров из CRM можно узнать открыв инструмент разработчика в браузере F12 (Google Chrome) и открыв в нём вкладку Network. При сохранении или изменении нужного Вам параметра будет сохранён лог с id в Preview выбранного лога.


    Для того чтобы узнать идентификаторы полей и т.д. в Вашей форме на сайте, необходимо инспектировать необходимый Вам элемент, это делается с помощью инструмента разработчика в браузере.
    Проинспектируем элемент поля 'name':

    Как видно, что идентификатор данного поля это: [name="name"] или [id="name"]
    Важно!!! Без кода виджетов из личного кабинета интеграция работать не будет.

    Интеграцию CRM с сайтом можно настроить с помощью API, ссылка на документацию: - https://goo.gl/G7FK5u
    Ответ написан
    Комментировать
  • Есть ли расширения для сохранения отредактированного в Devtools кода?

    mukhindev
    @mukhindev
    Если код лежит локально, в Chrome можно зайти в Devtools/Sources, слева на вкладке Filesystem, нажать + (Add folder to workspace) и выбрать корневую папку.
    После этого манипуляции в Devtools будут вноситься в исходники.
    Ответ написан
    Комментировать
  • Найдена опасная уязвимость в очень популярном мобильном приложении. Что делать?

    vabka
    @vabka
    Токсичный шарпист
    Есть ли законные способы получить вознаграждение за проделанный труд и помощь сервису

    Если у этого приложения есть программа багбаунти, то да - про пишите в СП и они потом вам соответствующую награду выдадут.
    Если нет - можно заслужить только "спасибо", а в худшем случае ещё и обвинение во взломе с последующим судебным иском.

    Хотя некоторые компании без багбаунти могут и наградить чемнибудь.
    Например знаю 1 случай, когда клиент нашёл способ пользоваться платным сервисом без оплаты - он рассказал об этой уязвимости и ему дали промокоды на год пользования.
    Ответ написан
    2 комментария
  • Найдена опасная уязвимость в очень популярном мобильном приложении. Что делать?

    CityCat4
    @CityCat4 Куратор тега Информационная безопасность
    Внимание! Изменился адрес почты!
    и учечка данных пользователей может обойтись сервису 100.......000$-ми убытками

    Может. Но (тебе) лучше, чтобы об этом сообщил кто-нибудь другой. Потому что скорее всего, тебя же и обвинят во взломе и хищении.
    Обращаться стоит только в том случае, если у сервиса есть программа по исправлению ошибок ("bugs bounty"), если же нет, а аппликуха популярная - лучше перестать пользоваться, застраховаться и не лезть, ну или сообщить с левого одноразового мейла.
    А что до вознаграждения - вот что пишет классик, Иван наш Андреевич Крылов
    Ответ написан
    Комментировать
  • Какое IDE для js?

    Sasha_Odesskiy
    @Sasha_Odesskiy
    бла-бла-бла!
    Судя по тому как ты пишешь, грамотно, то WebStorm
    30 дней бесплатно. но лучшего в мире IDE для JS нет. VS Code слабоват.
    если ещё есть 5 долларов, в месяц, то ты счастливчик.
    Ответ написан
    9 комментариев
  • Двойной ip при определении ip пользователя?

    @stimu
    Настоящий IP находится только в REMOTE_ADDR, все остальное может содержать все что захотел написать отправляющий эти заголовки, хоть буквы.
    Ответ написан
    1 комментарий
  • Кто может объяснить что это за ошибка в консоли?

    alex4answ
    @alex4answ
    Серьезно?
    Там же красным по белому написано 404, favicon not found
    Ответ написан
    2 комментария
  • JavaScript без {}?

    vabka
    @vabka
    Токсичный шарпист
    Посмотрите на ReasonML и Fable
    CoffeScript полумёртвый.
    Ответ написан
    1 комментарий
  • Как отфильтровать массив объектов по ключам?

    0xD34F
    @0xD34F Куратор тега Vue.js
    computed: {
      grouped() {
        return this.arr.reduce((acc, n) => ((acc[n.group] ??= []).push(n), acc), {});
      },
    },

    <v-expansion-panels>
      <v-expansion-panel v-for="(items, groupName) in grouped">
        <v-expansion-panel-header>{{ groupName }}</v-expansion-panel-header>
        <v-expansion-panel-content>
          <div v-for="n in items">{{ n.name }}</div>
        </v-expansion-panel-content>
      </v-expansion-panel>
    </v-expansion-panels>
    Ответ написан
    7 комментариев
  • Наткнулся на ошибочное поведение в регулярных выражениях?

    ayazer
    @ayazer
    Sr. Software Engineer
    нет, поведение абсолютно правильное. "/s" говорит что перенос строк будет матчится как ".", потому регулярка успешно матчит все после первого дива

    UPD: такое через negative lookahead достать можно
    (\bdiv\b.*)(?!.*\1)$ (! без /s флага)

    вернет нужное div></body></html>
    Ответ написан
    3 комментария
  • Как найти id и остановить вопроспроизведение ролика?

    @Anonimmus Автор вопроса
    решено, может кому пригодится

    <div class="card">
    
    					<!-- изображение карты -->
    					<div class="card-img">
    						<a class="lightbox" href="#data-1">
    							<img src="source/img/FNAF4_cover.jpg" />
    						</a>
    						<div class="lightbox-target" id="data-1">
    							<video id="video1" controls>
    								<source src="source/video/FNAF 4.mp4" type="video/mp4">
    								Your browser does not support HTML5 video.
    							</video>
    							<a class="lightbox-close" href="#"></a>
    						</div>
    
    					</div>
    					<!-- конец изображения карты -->
    
    					<!-- Заголовок карты -->
    					<div class="card-title">
    						<span class="card-title__title">Заголовок фото видео</span>
    					</div>
    					<!-- конец Заголовок карты -->
    
    					<!-- ссылка -->
    					<!-- <div class="card-button">
    						<a class="card-button__link" href="#0"></a>
    					</div> -->
    					<!-- конец ссылка -->
    				</div>

    $('.lightbox').click(function (event) {
    	var thisvideo = $(this).next('div').attr('id');
    });
    
    $('.lightbox-close').click(function () {
    
    	var myVideoNow = $(this).prev('video').attr('id');
    	// alert(myVideoNow);
    	var myVideo = document.getElementById(myVideoNow);
    
    	if (myVideo != null) {
    		myVideo.pause();
    	}
    });
    Ответ написан
    Комментировать
  • Как сделать Редактирование холста canvas несколькими людьми?

    @askhat
    Делал что-то подобное, решение свелось к созданию набора процедур отрисовывающих что-то на канвасе, и синхронизирующегося хранилища (заюзал PouchDB).

    Иными словами, когда пользователь например ставит точку с координатами [1,1] (читай MouseEvent {x: 1, y: 1}), мы сначала пишем документ { type: 'point', x: 1, y: 1 }, сохраняем в базу и оповещаем клиентов (включая себя). И только после того как документ сохранился и пришёл на клиенты, вызываем ctx.arc(...
    Ответ написан
    Комментировать
  • Как верстать доступные сайты?

    MrDecoy
    @MrDecoy
    Верставший фронтендер
    То, о чём Вы спрашиваете, официально называется WAI-ARIA.
    Тут можно скачать бесплатно экранного диктора и с помощью него тестировать свои сайты, осуществляя навигацию по ним с помощью табуляции, а так же открывая специальное меню с помощью горячих клавиш (командная кнопка приложения, которую назначите, по умолчанию ins+f7, или f6? Не помню уже точно :-) )

    Доклады Вадима Макеева на ютубе:
    https://www.youtube.com/watch?v=MWJKwn_gKR4
    https://www.youtube.com/watch?v=ssJsjGZE2sc

    Если действительно умеете соблюдать семантику, то, скорее всего, Вы уже сделали достаточно.
    Рускоязычные ресурсы по доступности:
    https://weblind.ru/
    specialbank.ru/guide (В данный момент чёт не работает, но должен)
    Есть курс, где учат именно этому: https://kurmak.info/
    Статья на хабре: https://habr.com/ru/post/40730/ (там внизу есть полезные ссылки)
    Тут можно найти информацию по этому вопросу, в том числе перевод статей из первой ссылки англоязычных ресурсов

    В подкасте Веб-стандарты упоминается об этом очень часто. Тут можно прослушать все выпуски, а так же покопаться в выпусках и поискать упоминания доступности и статьи про это.

    Есть англоязычные ресурсы
    Про доступные компоненты: https://inclusive-components.design/ (нажимаете в хроме справа сверху "перевести страницу" и профит)
    Есть спецификация: https://www.w3.org/TR/wai-aria-1.1/#usage (аналогично, перевод в браузере и профит)
    MDN: https://developer.mozilla.org/en-US/docs/Learn/Acc...
    Ответ написан
    1 комментарий
  • Как организовать сбор отпечатков пальцев?

    zoonman
    @zoonman
    ⋆⋆⋆⋆⋆
    Ну вот смотрите, у вас есть сенсор, например "фотография" отпечатка. Далее эта фотография обрабатывается системой машинного зрения, которая извлекает особенности строения вашего отпечатка. Читайте про то, как работает дактилоскопия в криминалистике. Назовем этот набор особенностей "узор". Вобщем, доводите железяку до состояния, когда она вам будет возвращать "узор". Собираете базу узоров, ранжируете наборы особенностей по максимуму специфичности. Получаете реверсивное дерево поиска. Отсекаете все ненужное. Строите по нему индекс.
    На телефонах тот же принцип, только узор хранится в железяке непосредственно и аппарат взаимодействует по принципу - какой идентификатор узора и событие распознавания. Ну и добавление со стиранием. Принцип тот же самый, только реализован полностью в железе с публичным интерфейсом по SPI/I²C.
    Ответ написан
    2 комментария
  • Как очистить результат запроса на сервер?

    @MamaLuyba
    ну так как бэ написано же
    insertAdjacentHTML() разбирает указанный текст как HTML или XML и вставляет полученные узлы (nodes) в DOM дерево в указанную позицию. Данная функция не переписывает имеющиеся элементы


    соответственно, нужно очищать содержание блока, выводящего информацию. т.е. wrap.innerHtml = '';
    Ответ написан
    Комментировать
  • Как написать программу угадайка?

    vabka
    @vabka
    Токсичный шарпист
    Как такое написать? с чего начать?

    1. Надо сформулировать более точные требования.
    Например: Игра графическая и должна запускаться на веб-странице
    2. Исследуем, какие технологии для этого пригодны.
    Например: Для решения подобной задачи можно использовать:
    - Unity и запустить игру в веб-плеере
    - Javascript и отрисовать игру в canvas
    - Какой-нибудь другой игровой движок, который умеет работать в вебе.
    3. Выбираем наиболее уместную и интересную технологию, раз уж мы учимся.
    - Unity очень большой. Придётся изучить не только юнити, но и C#, ООП и фиг знает что. При этом игры на юнити в вебе достаточно долго запускаются.
    - Какой-то другой движок берёт на себя все минусы юнити + будет вероятно менее перспективной тратой времени.
    - Javascript тут выглядит идеально - для решения этой задачи даже не придётся изучать css, html и вёрстку.
    4. Последовательно изучаем выбранную технологию. Для Javascript хороший вариант для начала - это MDN.

    Напомню, что JS я выбрал исключительно из требований. Можно например поменять требования и оставить "не важно, как выглядит игра и где она запускается. Надо как можно быстрее изучить программирование и сделать её" - тогда бери Scratch
    Ответ написан
    Комментировать
  • Как правильно написать календарь со кастомным исчислением?

    WblCHA
    @WblCHA
    Зачем так сложно? Тебе достаточно посчитать количество дней с начала отсчёта и получить остаток от деления на 7.
    (() => {
      const DAYS_IN_MONTH = 30;
      const DAYS_IN_YEAR = DAYS_IN_MONTH * 12;
      const LEAP_YEAR_BONUS_DAYS = 1;
      const DAYS_OF_WEEK = ['Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday', 'Sunday'];
      
      
      const getDayOfWeek = (year, month, day) => {
        let daysCount = (year - 1) * DAYS_IN_YEAR + (month - 1) * DAYS_IN_MONTH + day;
        daysCount += getAllLeapYearBonusDays(month > 2 ? year : year - 1);
        
        return DAYS_OF_WEEK[daysCount % 7];
      };
      
      const getAllLeapYearBonusDays = (year) => (~~(year / 5) - ~~(year / 100) + ~~(year / 500)) * LEAP_YEAR_BONUS_DAYS;
      
      return getDayOfWeek(1001, 8, 24); // Tuesday
      return getDayOfWeek(1, 8, 24); // Tuesday
    })()
    Ответ написан
    3 комментария