Ответы пользователя по тегу JavaScript
  • Как передавать сообщения со страницы в контент-скрипт и обратно?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Так контент-скрипт - это часть расширения. Так что не получится его не использовать. Поэтому только через сообщения.
    spoiler
    Контент-скрипт:
    var port = chrome.runtime.connect();
    
    window.addEventListener("message", function(event) {
      if (event.source != window) return;
      if (event.data.type == "FROM_PAGE") {
        console.log("Получено сообщение от страницы: " + event.data.text);
        port.postMessage(event.data.text);
      }
    }, false);

    Страница:
    document.getElementById("theButton").addEventListener("click",
        function() {
      window.postMessage({ type:"FROM_PAGE", text:"Сообщение со страницы!" },"*");
    }, false);
    Ответ написан
    3 комментария
  • Можно ли как то при заходе на любой сайт выполнять js код?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Да.
    Есть браузерные расширения типа Greasemonkey.

    Можно даже своё браузерное расширение сделать, но это дольше и сложнее, и надо хорошо уметь программировать.
    Ответ написан
    1 комментарий
  • Как выполнить функцию один раз при скролле jquery?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Чтобы любую фунцию запускать лишь один раз, нужно создать внешнюю переменную, где хранить количество запусков функции. Это универсальное решение. В вашем случае достаточно булевой переменной.
    var was_used = false;
    function myFunc() {
      if (was_used) return;
      was_used = true;
      .................
    }


    Конечно, это костыльное решение, хоть и универсальное. Так что нужно обязательно добавить такую строчку кода:
    //TODO: когда наберусь опыта, нужно провести рефакторинг, оптимизацию.
    Ответ написан
    Комментировать
  • Почему угасает энергия в моделировании "гравитации" в JS?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    var g = 0.05;
    console.log(g + g == 0.1); //true
    console.log(g + g + g == 0.15); //false
    Ответ написан
  • Ветвление if в javascript. Почему не работает?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Вместо:
    (1 < number_cam < 5)

    Пишите:
    (1 < number_cam && number_cam < 5)
    Ответ написан
    1 комментарий
  • Как задать условие?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Немного сумбурно и странно звучит вопрос.

    Насколько я понимаю, вы выводите или не выводите блок div по своему усмотрению, а после него в обязательном порядке выводится блок с изображением, в который вы не можете вмешиваться.

    В таком случае желание не показывать блок в коде противоречит условию задачи. Ведь выводить или не выводить мы узнаём позже, причём на стороне клиента с помощью js. Так что в коде блок должен присутствовать обязательно.

    Получается, что задачу можно переформулировать так: не показывать блок div до тех пор, пока не будет обнаружено изображение.

    Делается это, очевидно, путём изначальной невидимости блока div.
    .block {display:none}

    Далее скриптом отслеживаем появление изображения, и меняем свойство невидимости у блока.
    Ответ написан
    1 комментарий
  • Как передать данные в свое Google Chrome расширение с локального вебсервера?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Расширение может обращаться к вашему вебсерверу, как и любой другой javascript код.
    В частности, есть это.
    Ответ написан
  • Как обратиться к свойству document другой html страницы?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Под страницами вы подразумеваете вкладки одного браузера?

    Если обе страницы на одном сайте, то это возможно через сообщения, localStorage, воркеры и т.д.
    Иначе придётся их подружить.

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

    dollar
    @dollar
    Делай добро и бросай его в воду.
    "Просто" ничего не бывает (из того, что связано с человеческой психикой). Это аксиома.
    ("просто" в значении "без причины")
    Так что вы чего-то недоговариваете. История не полная.

    А данные не только могут украсть, но и постоянно крадут. Но мало кто об этом задумывается.
    Ответ написан
    Комментировать
  • Как сделать повторение цикла если условие не выполнено?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Сложный вопрос на самом деле. Я имею в виду не то, что в заголовке, а что вы хотите по сути. А хотите вы всего и сразу. Но так хотеть нельзя, увы и ах.

    Начнём с того, что вы учите язык несколько дней. Пусть вы успели уже поизучать/попрактиковаться 50 часов. Уровень эксперта - это условно 10000 часов. Делим.
    Получается, что ваши знания-навыки - это лишь 0.5% от уровня эксперта.
    То есть это только начало пути, и не получится просто взять и научиться за 1 вопрос здесь.

    Далее, алгоритмы типа пузырька и прочие алгоритмы из учебника - это классика. Эти алгоритмы хорошо изучены, и не вам их заново изобретать. Ну, конечно, возможность у вас есть изобретать эти велосипеды с нуля, но придётся пройти большой путь, никуда не подсматривая. Но зачем? Ради чего? Алгоритмы из учебника лучше смотреть в учебнике и не переживать особо по этому поводу. В грамотной программе обучения вы можете встретить задачки, которые вам преподносятся с нарастающей сложностью, и обычно вчерашний маетриал можно использовать для решения сегодняшней задачи. А вы хотите изучать не структурированно и с наскока, и чтобы получалось легко? Нет, так не бывает.

    А вот где можно разгуляться, так это при решении своих специфических задач, которых нет в учебнике. Но и здесь не всё так просто. Те отвечающие, которые здесь дают моментальные ответы, уже имеют приличный опыт за плечами. То есть у них есть уже готовые или почти готовые решения, которые они просто достают из головы. Они уже решали похожие задачки, и разбираются. Если же вы сталкиваетесь с проблемой, с которой никогда не имели дело, то нужно время, чтобы её осмыслить и начать думать. По науке требуется 23 минуты для этого. То есть вы прочитали задачу, её точную формулировку, а потом начинаете думать - и пройдёт где-то 23 минуты, прежде чем начнёт вырисовываться решение. В это время можно ходить, смотреть в окно, заниматься рутинными делами, не мешать мозгу работать (не загружать его ютубом и статейками).

    Свои собственные решения - это как раз самое ценное в плане обучения. Это и есть рост. На некоторые архитектурные решения требуется несколько дней.

    Конечно, вот так вот начинать думать нужно после изучения теории, или хотя бы одновременно с ней. Так что если синтаксис языка не знаком, то нужно сначала изучить его. Циклы и ветвления - это база программирования. Так что подсматривать можно, но не готовые решения, а сам синтаксис языка по документации или по учебнику.
    Ответ написан
    Комментировать
  • Как это работает (метод sort)?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Функции sort передаётся в качестве аргумента функция compareNumeric.

    Передаётся не результат вызова функции compareNumeric, иначе были бы скобки, означающие вызов, а передаётся именно сама функция compareNumeric, (т.е. указатель на неё, т.е. её имя).

    Далее функция sort, как бы она ни была устроена внутри, использует функцию compareNumeric по своему усмотрению. Может вызывать её с любыми параметрами, какими захочет. И так как вы не видите, как реализована функция sort внутри, то вы об этом можете лишь догадываться. Но очевидно, что это так, ведь при сортировке нужно будет сравнивать элементы массива попарно.
    Ответ написан
  • Как программно нажать на этот проклятый div?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Что если так? Это всё в консоль (чтобы проверить).
    function simulateClick(node) {
      function trigger(node, event_name) {
        var ev = document.createEvent('MouseEvents');
        ev.initEvent(event_name, true, true);
        node.dispatchEvent(ev);
      }
      trigger(node, "mouseover");
      trigger(node, "mousedown");
      trigger(node, "mouseup");
      trigger(node, "click");
    }
    
    var div = document.getElementById("dbut8"); //Ищем нужный див.
    simulateClick(div); //Полноценно кликаем по нему.

    P.S. Сайт по ссылке не открывал.
    Ответ написан
    1 комментарий
  • Почему не работает функция?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    getElementsByTagName (мн. число)

    Вы получаете массив, а не отдельный элемент.

    Тогда уж так:
    document.getElementsByTagName("option")[0].onmousedown =
    Ответ написан
    Комментировать
  • Как получить курсы доллара и евро?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    JSON.parse()
    fetch()

    P.S. Способов много. Есть ощущение, что вы даже не пытались искать.
    Ответ написан
    1 комментарий
  • Как сделать дату в формате 1 January 2020, 2:22pm?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    А вы это уже читали?
    Если что, это типа ответ.
    Ответ написан
    Комментировать
  • Как переместить элементы с одинаковыми классами?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Можно с помощью JS добавить id элементам.

    Например, как-то так:
    document.querySelectorAll('div.a1').forEach(e => {
      e.id = "a1_" + (window.new_id ? ++new_id : new_id = 1);
    });

    Но это лишь пример. Лучшая оптимизация зависит от конкретного сайта и от нюансов конкретной задачи. Хотя, если там 5-10 элементов, можно и забить на оптимизацию, лишь бы не setInterval :)
    Ответ написан
  • Как скрыть элемент по его имени?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Например, так:
    var arr = document.getElementsByName("test");
    if (arr.length > 0) {
      arr[0].style.display = "none";
    }
    Ответ написан
    Комментировать
  • Почему при вводе нуля выполняется else, но при этом выполняется преобразование из условия if?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Потому что ноль - это ложь в условии.

    Ложных значений в JS всего 7 штук: false, null, 0, 0n, "", NaN, undefined.
    Это надо просто запомнить.

    Конкретно ваше условие:
    if ( num = Number(num) ){
    можно попробовать заменить на:
    if ( (num = Number(num)) || num === 0 ){
    Тогда в else пойдёт только в случае ошибки.
    Конечно, это далеко не единственный способ и не самый красивый. Но суть ошибки, надеюсь, ясна.
    Ответ написан
  • Почему функция возвращает undefined?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Потому что перевод строки после return движок JS воспринимает как границу между операторами. Как будто там точка с запятой.
    Если записать в одну строчку, то не будет undefined:
    if(res.includes(array[i]) ) return res.push(array[i])


    Ну а так, в целом, return здесь вовсе не нужен.
    Ведь return - это выход из функции.
    А вам нужен выход из текущей итерации цикла - это continue.
    Ответ написан
    Комментировать
  • Игра одень куклу на js, какие использовать инструменты?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Phaser
    Ответ написан
    Комментировать