Ответы пользователя по тегу JavaScript
  • Что такое callbackUrl?

    Stalker_RED
    @Stalker_RED
    На примере сервиса оплаты.

    У тебя есть интернет магазин, в котором продаются плющевые медведи.
    Пользователь добавил пару медведей в корзину, и магазин показывает ему кнопку "оплатить" от платежной системы.
    Для этого сервер делает запрос у внешнему API типа "у нас тут намечается сделка на 149.99, сгенерируйте нам кнопочку "оплатить через mastercard"".
    Кнопочка отображается в браузере у клиента. Он на нее нажимает, и переходит на страничку платежной системы (или в попап). До этого все обходилось без коллбеков - ты запросил код кнопки, они его отдали тебе, пользователь увидел кнопочку, нажал и... он же ушел с твоего сайта, и ты не знаешь что он там на сайт платежной системы делает.
    А после факта оплаты твоему сайту неплохо бы получить подтверждение, о том, что пользователь действительно оплатил. Или у него денег не хватило, или интернет отрубился, или заснул в процессе покупки, whatever...
    Вот для таких случаев ты и указываешь callbackUrl. Адрес на твоем сайте, куда платежная система (или какой-то другой внешний API) можеет прислать своё уведомление. Что оплата прошла успешно, или что все пропало, отменяем.
    Ответ написан
    Комментировать
  • Как сделать сайт многопользовательским?

    Stalker_RED
    @Stalker_RED
    При перемещении картинки нужно отправить данные о перемещении на сервер, там их сохранить, и при последующем открытии странцы сервер должен отдать уже новые координаты.

    Если нужно чтобы они перемещались в реалтайме, как в многопользовательских играх - нужно постоянно слать с сервера на все клиенты данные через websocket или long polling.
    Ответ написан
    Комментировать
  • Как это работает?

    Stalker_RED
    @Stalker_RED
    Ваш вопрос не про алгоритм а про консоль хрома.

    И всё же не понятно почему ничего не выводит.


    GVmrAMg.png
    Если выражение что-то возвращает - консоль выводит результат. Если выражение ничего не возвращает - консоль выводит undefined.

    У вас там console.log() внутри if-а, и когда условие num % i == 0 не выпольняется, то и console.log не вызывается.

    Смотрите я все починил:
    let num = 2 
    for(let i = 2; num > i; i++){
      if (num % i == 0){
        console.log(`число ${num} простое, так как делится на ${i} без остатка`);
      } else {
        console.log(`${num} не делится на ${i} без остатка`);
      }
    }
    Ответ написан
    1 комментарий
  • Что использовать для манипуляции с css классами - classList, getAttribute, className?

    Stalker_RED
    @Stalker_RED
    Сработают все.
    Я бы писал как-то так:
    document.querySelectorAll('[class]').forEach(elem => 
      elem.className = elem.className.replace(/-([a-z])/g, (a,b) => b.toUpperCase())
    );

    Надеюсь, что это у вас разовая задача "для поиграться", и вы не будете тащить это в прод.
    Ответ написан
  • Как найти текст в браузерной игре?

    Stalker_RED
    @Stalker_RED
    На странице var app = ... там json с экранированными символами, которые при расшифровке дают вот такие тексты:
    "localization": {
        "agree_error": "Пожалуйста, подтвердите соглашения",
        "wrong_data": "Вы ввели неверные данные",
        "common_error": "Произошла ошибка, пожалуйста, обратитесь в службу поддержки",
        "not_spoofer_error": "Ошибка!",
        "not_spoofer_goto": "Зайдите в игру по этой ссылке",
        "social_invite_friends_dialog": "Приходи играть",
        "payment_window": "Окно оплаты",
        "restore_pass": "Инструкции по изменению пароля будут отправлены на указанный вами электронный адрес.",
        "pass_empty": "Введите пароль",
        "consent_success": "Изменения успешно сохранены!",
        "consent_error": "Не удалось сохранить изменения, попробуйте позже",
        "account_enter_pin": "На почтовый ящик %email% был отправлен отправлен PIN. Если письмо не пришло, проверьте папку \"спам\"",
        "feedback_common_error": "Произошла ошибка, пожалуйста, обратитесь в службу поддержки",
        "lp.interact.code_reask_succeded": "Новый код отправлен",
        "lp.interact.days_short": "д",
        "lp.interact.hours_short": "ч",
        "lp.interact.minutes_short": "м",
        "lp.interact.realm_ready": "Играть сейчас!",
        "errors.email_empty": "Заполните поле email",
        "errors.email_wrong": "Некорректный email",
        "errors.phone_empty": "Заполните телефон",
        "errors.phone_invalid": "Некорректный телефон",
        "lp.email_gather.application_received": "Заявка получена!",
        "download_email.success": "Инструкция по установке была выслана на %email%",
        "account.new_game_button": "Удалить",
        "account.new_game_success": "Игровой прогресс удален, обновите страницу",
        "account.new_game_success_reload": "Обновить",
        "account.new_game_wrong_input": "Вы ввели неверные данные",
        "ecommpay.button_to_retry": "Повторить попытку",
        "restore_form.try_again": "Повторить",
        "webgl.client_memory_allocation_error": "Игра не смогла выделить память. Закройте, пожалуйста, все вкладки или попробуйте другой браузер",
        "webgl.client_request_502_error": "Что-то пошло не так, попробуйте перезагрузить страницу",
        "payments.error_unavailable": "Платежи временно недоступны",
        "payments.error_retry": "Повторить",
        "faketutor.dialog.greeting.continue": "Продолжить",
        "payment_methods.web.googleplay_card": "Использование платёжного метода Google Pay без привязки банковской карты невозможно. Пожалуйста, сохраните данные карты в вашем браузере и повторите попытку.",
        "payment_methods.web.applepay_card": "Использование платёжного метода Apple Pay без привязки банковской карты невозможно. Пожалуйста, сохраните данные карты в кошельке Apple Wallet и повторите попытку.",
        "cookies.groups.names.statistics": "Статистика",
        "cookies.groups.names.strictly_necessary": "Строго необходимые",
        "cookies.groups.text.strictly_necessary": "Необходимые файлы cookie помогают улучшить пользование сайтом, обеспечивая работу основных функций, вроде навигации по страницам и доступа к безопасным областям сайта. Без этих файлов сайт не сможет нормально функционировать.",
        "cookies.groups.text.statistics": "Статистические файлы cookie позволяют владельцам сайтов узнавать как посетители взаимодействуют с сайтом, анонимно собирая и передавая информацию.",
        "cookies.groups.buttons.accept": "Принять",
        "cookie.warning_text": "Наш сайт использует файлы cookie для вашего удобства. Продолжая использовать наш сайт, вы подтверждаете свое согласие на получение таких файлов. Вы можете ознакомиться с нашей %Политикой конфиденциальности% в отношении файлов cookie и аналогичных технологий.",
        "cookies.groups.names.title": "Управление параметрами содержимого",
        "cookies.groups.buttons.active": "Всегда активно",
        "cookies.groups.names.show_text": "варианты просмотра",
        "no_browser_webgl_support": "Ваш браузер не поддерживает WebGL.",
        "check_faq_for_webgl_issues": "Посетите %link% для поиска решений возможных проблем.",
        "ecommpay.button_pay": "Оплатить",
        "ecommpay.button_back": "Назад",
        "stripe.enter_card_data": "Ввод данных карты",
        "stripe.secure_card_text": "Безопасная оплата картой",
        "stripe.card_number": "Номер карты",
        "stripe.card_date": "ММ/ГГ",
        "stripe.agreement_text": "Нажимая кнопку \"Оплатить\", вы принимаете %Соглашение о хранении идентификационных данных владельца карты%.",
        "stripe.savedcards_text": "Сохранённые карты",
        "stripe.clear_text": "Очистить",
        "stripe.sure_text": "Вы уверены?",
        "dpd_cancel_button": "Отменить",
        "keyin2tables.cookie_warning.Ok": "Хорошо",
        "password_strength.0": "Очень ненадежный пароль",
        "password_strength.1": "Слабый пароль",
        "password_strength.2": "Средний пароль",
        "password_strength.3": "Хороший пароль",
        "password_strength.4": "Очень надежный пароль",
        "preloader_video.unmute": "Включить звук",
        "preloader_video.mute": "Выключить звук",
        "support.emptySubject": "Пожалуйста, введите тему сообщения",
        "support.emptyBody": "Пожалуйста, введите описание проблемы",
        "support.emptyType": "Пожалуйста, выберите тип проблемы",
        "support.emptyEmail": "Пожалуйста, введите email",
        "support.wrongEmail": "Некорректный email",
        "support.common": "Неизвестная ошибка!",
        "restore_form.wait_30": "Нельзя запрашивать восстановление чаще чем раз в 30 секунд",
        "account.new_game_confirm_prompt": "Напишите \"DELETE\" в поле для подтверждения"
      },

    Остальное, боюсь, в других файлах, которые подгружаются отдельными запросами.
    Ответ написан
    Комментировать
  • Select, у вариантов есть цена, ее вывожу по id, при перезагрузки страницы, если стоит selected у варианта, цена не выводит, почему?

    Stalker_RED
    @Stalker_RED
    Потому что расчеты и отображения у вас происходят в функции getRes(), которая выхывается только при изменении выбора в селекте, а не при перезагрузке страницы.

    Но даже добавив ее вызов при загрузке вам еще нужно будет "запоминить" (в localStorage, например) предыдущий выбор в селектах и применить его.
    Ответ написан
  • Как в Laravel изменить значение элемента через Jquery?

    Stalker_RED
    @Stalker_RED
    При перезагрузке страницы отображается то содержимое, которое отдает сервер.

    Вам нужно или отменить перезагрузку или отправить это изменение на сервер, чтобы он у себя где-то это записал, и в следующий раз отдавал уже модифицированную страницу.

    Возможно вы рановато полезли во фреймворки, и неплохо бы еще с основами поиграться, понять что у вас в браузере происходит, что на сервере, и что передается туда-сюда через интернеты.
    Ответ написан
    Комментировать
  • Как сделать отступ при вставке картинки и печать жирным шрифтом в div?

    Stalker_RED
    @Stalker_RED
    Отслеживание событие paste, проверяйте что вставилось, если картинка - добавьте br.
    Для жирного делайте createElement('strong'), ну или b. При отключении жирного - перемешайте курсор на позицию после вашего strong'а.

    Вообще, создание самодельного текстового редактора - довольно сложная тема. Боюсь, что если даже с такими вопросами вы не справились, то выделение жирным уже набранного текста с форматированием (часть списка, например) покажется вам вообще адом:)

    Если вы делаете это не ради скиллов - найдите готовый редактор.
    Ответ написан
  • Как создать свой метод?

    Stalker_RED
    @Stalker_RED
    const prototype = Object.getPrototypeOf(obj);
    prototype.revers = function(){
      return arr[0] + 1;
    };
    Ответ написан
    2 комментария
  • В чём ошибка в коде?

    Stalker_RED
    @Stalker_RED
    Потому что когда начинается for переменная i=6, а элемента s[6] у вас нет.

    Код сильно переусложнен. Однобуквенные переменные - зло, сбивают с толку.
    Переменная i участвует аж в трех циклах, тоже плохо.

    addEventListener внутри цикла. Хорошо, что сейчас этот цикл сломан :)

    Вот это вы пытались сделать?
    Ответ написан
    Комментировать
  • Как добавить кнопку в контекстное меню браузера?

    Stalker_RED
    @Stalker_RED
    Добавить нельзя, но можно показывать свое меню вместо обычного.
    Ответ написан
  • Что сделать с большими аудиофайлами, чтобы их было удобно слушать на веб-странице?

    Stalker_RED
    @Stalker_RED
    В можно смотреть метку времени и записывать в localStorage при паузе или при закрытии вкладки.
    Или раз в 10 секунд, что проще.

    При повторном включении эту метку можно установить, и браузер сделает запрос с offset.

    И вот тут произойдет магия - браузер сам сделает запрос на нужный участок файла.
    https://developer.mozilla.org/en-US/docs/Web/HTTP/...

    Естественно сервер должен уметь отдавать файл не целиком, а нужными кусками, но в третьем тысячелетии это умеют почти все HTTP сервера.

    Еще есть media fragment uri но это более новая спека, и менее распространеная.
    Ответ написан
  • Есть ли такой браузер, который позволит смотреть код в iframe?

    Stalker_RED
    @Stalker_RED
    смотреть с помощью JavaScript
    Можно, отключив эти проверки безопасности в браузере.

    или PHP
    PHP вообще без разницы какой домен. Если ему сервер отдал по запросу содержимое ответа - можете на него смело "смотреть".
    Ответ написан
    2 комментария
  • Как отследить цепочку событий для функции в js?

    Stalker_RED
    @Stalker_RED
    window.addEventListener('popstate', function(){
      console.trace();
      debugger;
    });
    Ответ написан
    3 комментария
  • Библиотека для навигации по экрану ( аналог инструмента "рука" в фш, фигме, тд )?

    Stalker_RED
    @Stalker_RED
    Само перемещение - строк 5 кода.
    Ну ещё 10 на проверку границ и смену курсора при перетягивании.
    Ответ написан
    Комментировать
  • Как то можно обратится к js обектам на стороне сервера?

    Stalker_RED
    @Stalker_RED
    Описание довольно сумбурное, но похоже вы хотите RPC, хотя скорее всего вам больше подошёл бы API, и обычные POST и GET запросы.

    Если хотите более развёрнутый ответ - опишите зачем вам такие вызовы, что вы пытаетесь сделать.
    Ответ написан
    Комментировать
  • Как реализовать действие правой кнопкой мыши вращение на 180 градусов блока div?

    Stalker_RED
    @Stalker_RED
    Клик правой - событие contextmenu, а отменить стандартное действие события - используйте preventDefault()

    При клике делайте toggleClass для смены цвета или transform: rotate();

    Ответ написан
    1 комментарий
  • Как сделать анимацию цифр из примера?

    Stalker_RED
    @Stalker_RED
    Обертка с overflow: hidden
    Внутри нее каждый символ в отдельном двухэтажном блоке.
    У каждого блока разная задержка анимации
    Ответ написан
  • Правильно ли выводить переменные через запятую в консоль?

    Stalker_RED
    @Stalker_RED
    Можно проще:
    console.log('name', name, 'age', age);
    // -> name Alen age 20


    Еще можно вот так
    console.log({name, age});
    // -> {name: 'Alen', age: 20}

    но это для коротких значений, длинные записи свернутся.

    Еще классная штука console.table() для двумерных массивов и объектов.
    И вообще, консоль много полезного умеет.

    И задумайтесь - для чего вы это делаете, кто эти надписи будет читать?
    слово "Vozrasr" не каждый поймет. Если чисто для себя пишете, и не знаете как написать на английском - пишите на русском уже, все равно в мире js сплошняком юникод.
    Ответ написан
    1 комментарий