Ответы пользователя по тегу JavaScript
  • Как сделать тему в письме?

    neluzhin
    @neluzhin
    Если вкратце, создайте в форме поле, отвечающее за тему обращения:

    <input type="text" name="subject">

    В PHP коде добавьте в начале:

    $subject = isset($_POST['subject']) ? $_POST['subject'] : 'Заголовок письма, если поле не заполнили в форме на сайте';

    И чуть ниже удалите эту строку, т.к. мы уже задаем переменную $subject выше:

    $subject = "$formData";

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

    neluzhin
    @neluzhin
    Атрибут id подразумевает уникальность элемента, следовательно, на странице не может быть два элемента с одинаковыми ID. Метод VK.Widgets.Comments() первым параметром принимает именно этот самый ID элемента. Вам надо сделать что-то вроде такого:

    Первый блок комментариев:
    <div id="vk_comments_1"></div>
    <script type="text/javascript">
      VK.Widgets.Comments("vk_comments_1", {redesign: 1, limit: 20, width: "1060", attach: "*"});
    </script>


    Второй блок комментариев:
    <div id="vk_comments_2"></div>
    <script type="text/javascript">
      VK.Widgets.Comments("vk_comments_2", {redesign: 1, limit: 20, width: "1060", attach: "*"});
    </script>


    Также, если вы хотите разместить несколько блоков комментариев на странице, чтобы в них были разные комментарии, вам надо будет в метод VK.Widgets.Comments() передать третий параметр с уникальным ID, иначе ВК будет в обоих виджетах отображать одинаковые комментарии. Например, у первого виджета можно поставить число 1, а у второго - число 2 Что это такое и зачем это нужно я отвечал вот здесь: Как сделать чат из комментариев ВК? (см. комментарии к ответу).
    Ответ написан
    5 комментариев
  • Какие есть способы предотвращения воровства файлов?

    neluzhin
    @neluzhin
    Полностью защититься не получится, но как минимум можно сделать код абсолютно неподдерживаемым - черт ногу сломит даже при малейших изменениях.

    Для начала, вы должны заинлайнить всё в один HTML-файл, как предложил Александр Татарин. Обязательно минифицируйте и объедините JS и засуньте его в единственный тег <script>. После минификации имена переменных вашего кода будут нечитаемыми.

    Затем прогоните страницу через HTML Muncher - это такая штука, которая переименует все CSS-классы в теге <style>, в атрибутах class вашей разметки, а также заменит все совпадения имен классов в JavaScript. Таким образом, был у вас класс .home, а станет .a, .icon превратится в .b и т.д.

    Ну а затем уже обмазываться тем, что порекомендовал вам пользователь neeil.
    Ответ написан
    Комментировать
  • Как формировать value для input[type=file]?

    neluzhin
    @neluzhin
    Вы не сможете изменить или задать атрибут value из соображений безопасности. По хорошему, вам надо сделать систему drag-n-drop так, чтобы данные при выборе файла вручную и данные при drag-n-drop'е хранились в одном месте (в скрытом div'е или может быть в какой-нибудь переменной), а затем уже AJAX-ом отправлять эти данные на сервер.

    Настоятельно рекомендую ознакомиться с разжевыванием техники чтения локальных файлов и реализации функции drag-n-drop от Эрика Бидельмана: www.html5rocks.com/ru/tutorials/file/dndfiles/
    Ответ написан
    Комментировать
  • Что может содержать в себе одна из главных функций jquery $();?

    neluzhin
    @neluzhin
    Только CSS-селекторы и те, что встроены в jQuery. Также функция принимает объекты DOM, возвращаемые функциями типа document.getElementById(), document с window и jQuery-объекты, типа $($('div')).
    Ответ написан
    Комментировать
  • Каким решением наиболее оптимально нарисовать и анимировать данный граф?

    neluzhin
    @neluzhin
    Может, вам подойдет Highcharts? Похожая анимация из работает коробки: демо.

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

    neluzhin
    @neluzhin
    Вы инициализируете капчу с помощью HTML, поэтому она рендерится всего один раз. Чтобы добавить их несколько на сайт, надо инициализировать капчу с помощью JavaScript.

    Для начала, подключайте API таким образом:

    <script src="https://www.google.com/recaptcha/api.js?onload=recaptchaCallback&render=explicit" async defer></script>

    Параметр render со значением explicit говорит, что капча будет инициализироваться не через HTML, а через JavaScript. А параметр onload содержит название JavaScript-функции, которая исполнится в момент загрузки страницы (в нашем случае это recaptchaCallback()).

    Теперь, собственно, надо написать какой-то JavaScript. Выглядеть он будет примерно так:

    var feedbackCaptcha;
    var authCaptcha;
    
    function recaptchaCallback() {
    	feedbackCaptcha = grecaptcha.render('feedback_captcha', {
    		'sitekey' : 'ваш_site_key',
    		'theme' : 'dark'
    	});
    	
    	authCaptcha = grecaptcha.render('auth_captcha', {
    		'sitekey' : 'ваш_site_key'
    	});
    }

    Тут мы создаем функцию recaptchaCallback(), при вызове которой будут рендериться две капчи: одна в элементе #feedback_captcha, а вторая - в #auth_captcha. У первой капчи будет тёмная тема.

    Разместим мы капчу на сайте примерно так:

    <form>
    	<!-- тут какие-то поля для оставления отзыва о сайте -->
    	<div id="feedback_captcha"></div>
    </form>
    <form>
    	<!-- тут какие-то поля для авторизации -->
    	<div id="auth_captcha"></div>
    </form>

    Для чего мы заключаем функции, которые рендерят капчу, в переменные? А нужно это для того, чтобы мы могли индивидуально для каждой капчи исполнять методы. Например, хорошо бы при каждой отправке AJAX-формы авторизации сбрасывать капчу. Сбрасывать мы будем ее так:

    grecaptcha.reset(authCaptcha)

    Также почитайте документацию: developers.google.com/recaptcha/docs/display
    Ответ написан
    3 комментария
  • ВКонтакте API метод messages.get. Что я делаю не так?

    neluzhin
    @neluzhin
    К методам messages.* получить доступ могут только standalone-приложения. Это приложения, работающие без помощи браузера. Например, клиенты (официальные приложения VK, Kate Mobile, Snapster и т.д.). А у вас тип приложения "веб-сайт".

    Вы ничего не сможете с этим поделать и заставить работать Open API с сообщениями не получится. Единственный выход - кидать пользователя на страницу получения токена в вашем standalone-приложении и просить скопировать его в форму на вашем сайте, а затем уже с сервера с этим токеном делать запросы. Но это плохо влияет на UX хотя бы потому, что на странице, откуда пользователь будет копировать этот самый токен, жирным написано, что копирование токена может быть небезопасным.
    Ответ написан
    2 комментария
  • Как получить событие получение нового сообщения в вк js sdk для irfame приложения?

    neluzhin
    @neluzhin
    Никак. Доступ к методам messages.* доступен только standalone-приложениям. iFrame-приложения и вебсайты получить доступ к сообщениям не могут.

    Также список всех событий в JavaScript SDK перечислен тут - ничего связанного с сообщениями там нет.
    Ответ написан
    Комментировать
  • Как вывести 2 предложения отправить пост при нажатии на кнопку?

    neluzhin
    @neluzhin
    Сначала вызываете один запрос на создание записи, после его выполнения будет коллбэк. При получении коллбэка сразу же отправляете второй запрос.

    Что-то типа такого:
    VK.api("wall.post", {"message": "Этот пост мне на стену!"}, function (data1) {
    	VK.api("wall.post", {"message": "А этот пост в группу!", "owner_id": -123456}, function (data2) {
    		alert("Вы отправили 2 записи!")
    	});
    });
    Ответ написан
    Комментировать
  • Как отправить пост на стену группы Вконтакте с картинкой средствами VK API JavaScript?

    neluzhin
    @neluzhin
    Конкретно через JavaScript загрузить у вас файлы не получится банально потому, что VK API не поддерживает CORS.

    Предположим, что у вас на сайте есть форма, где textarea и input[type=file]. Вы хотите сделать так, чтобы при отправке формы всё это добро постилось во ВКонтакте на стене вашей группы. Шаги будут примерно такие:
    1. После нажатия кнопки "Отправить" с помощью AJAX отправляйте изображение на ваш сервер.
    2. Получив изображение на сервере, согласно инструкции, загрузите его в альбом вашей группы ВК.
    3. После выполнения загрузки изображения ВК вернет вам его ID. Вы должны этот ID вернуть пользователю в ответ на загрузку изобржения, описанную в первом шаге.
    4. Приложите ID изображения как вложение к публикуемой записи. Пример кода:

      VK.api('wall.post', {
      	owner_id: '-GROUP_ID',
      	message: send_data,
      	attachments: 'photo' + photo_id // photo_id - это ID изображения
      }, function(data) {
      	if (data.response) alert('Успешно опубликовано в группе!');
      });


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

    neluzhin
    @neluzhin
    Если вы про браузерный JavaScript, то CORS не даст вам этого сделать с VK API своими средствами. Для работы с VK API через браузер надо использовать Open API.
    Ответ написан
    3 комментария
  • Как проверить что пользователь состоит в группе ВК после нажатия на Лайк?

    neluzhin
    @neluzhin
    Предполагаю, что лучшей схемой будет что-то вроде такого:
    1. Просите пользователя поставить лайк;
    2. Поместите где-нибудь возле виджета лайка кнопку авторизации через ВК, получите ID пользователя и методом groups.isMember узнайте, состоит ли пользователь в группе.
    Ответ написан