Ответы пользователя по тегу JavaScript
  • В чём проблема с вызовом функции в теле двойного цикла?

    jusio
    @jusio
    Senior Software Engineer at Restlet
    У вас неправильный доступ к элементам массива. Вместо statusMatrix[i, j]должно быть statusMatrix[i][j]

    Причём эта ошибка у вас везде в коде=)
    Ответ написан
    2 комментария
  • "Взлетит" ли Dart?

    jusio
    @jusio
    Senior Software Engineer at Restlet
    Основная проблема Dart в том, что он создавался как замена JS, и он должен был работать в своей собственной VM. На сегодняшний день не существует стабильных браузеров (Dartium не считается) нативно поддерживающих DartVM, и я сильно сомневаюсь, что это вообще может случится. Итого Dart является очередным языком, который компилируется в JS (со всеми вытекающими проблемами).

    Так-что скорее JavaScript дотянется до уровня Dart, чем Dart заменит JS.
    Ответ написан
    5 комментариев
  • Какие вы знаете JavaScript библиотеки для построения графов?

    jusio
    @jusio
    Senior Software Engineer at Restlet
    Под IE9 должно работать большинство существующих либ (ибо он поддерживает SVG и Canvas).

    Если у вас только один простой график то можно воспользоваться d3, или даже просто рисовать при помощи обычного canvas. Тоже самое придётся использовать если вам нужно сделать какой-нибудь очень замороченный график, ибо очень мало библиотек предоставляют хорошие возможности по расширению.

    Из библиотек предоставляющие готовые графики могу порекомендовать только Plottable.js (очень гибкая настройка) и предупредить насчёт nvd3 (практически нулевая документация, и куча багов разной тяжести). А также советую посмотреть список из 50 существующих библиотек для построения графиков: techslides.com/50-javascript-charting-and-graphics...
    Ответ написан
    Комментировать
  • JavaScript: динамическое внедрение script в head. Почему такие ошибки?

    jusio
    @jusio
    Senior Software Engineer at Restlet
    Проблема jQuery.
    Стандартный JS не умеет парсить скрипты из HTML ( то есть element.innerHTML="" не будет грузить скрипт, просто будет создан dom элемент).
    В jQuery для этого сделали специальный костыль, когда jQuery видит что кто-то пытается создать script-tag, они запускают синхронный ХHR, чтобы скачать тело скрипта и запустить его.
    Ответ написан
    1 комментарий
  • ES6 generators или promises?

    jusio
    @jusio
    Senior Software Engineer at Restlet
    Генераторы отлично дружат с promise.

    Pure Promises:

    fetchUser().then(function(user){
       return fetchUserPosts(user.id);
    })

    Promises+Generators (Пример из Q):
    Q.spawn(function*(){
       var user = yield fetchUser(); 
       var userPosts = yield  fetchUserPosts(user.id);
       return userPosts;
    });


    Никто не собирается сливать генераторы.
    Ответ написан
    5 комментариев
  • Параллельная загрузка скриптов с последовательным выполнением?

    jusio
    @jusio
    Senior Software Engineer at Restlet
    Если действительно хочется решения на чистом JS без использования каких-либо библиотек, то можно скачивать скрипты при помощи XMLHttpRequest и вставлять в DOM тело скрипта.
    Пример::
    function fetch(url,callback){
        var req = new XMLHttpRequest();
        req.open("GET",url);
        req.onload = function(){
          callback(req.responseText);
       }
       req.send();
    }
    
    function insertScript(scriptBody){
       var script = document.createElement('script');
       script.innerText = scriptBody;
       document.body.appendChild(script);
    }
    
    var scripts = ["/first.js","second.js"];
    var bodies = new Array(scripts.length);
    
    scripts.forEach(function(script,index){
        fetch(script,function(body){
            bodies[index]=body;
            if(bodies.every(function(el){return el})) {
                 bodies.forEach(insertScript);
            }
        });
    })
    Ответ написан
    2 комментария
  • Как осуществить реагирование расширения Chrome на уведомления с сайта?

    jusio
    @jusio
    Senior Software Engineer at Restlet
    Первый способ, самый простой

    В манифесте перечислить домены с которых можно подключаться:

    "externally_connectable": {
      "matches": ["https://somesites.com/*"]
    }


    В скриптах страницы теперь можно будет посылать сообщения этому расширению:
    if(chrome && chrome.runtime && chrome.runtime.sendMessage){
    var editorExtensionId = "уникальный идентификатор раширения";
    chrome.runtime.sendMessage(editorExtensionId, {notification:"Some notification"});
    }

    Обработка сообщений в расширении:
    chrome.runtime.onMessageExternal.addListener(
      function(request, sender, sendResponse) {
        if (sender.url != "https://somesites.com")
          return;  
        showNotification(request.notification);
      });


    Пример из официальной документации

    Второй способ
    Из контекста страницы можно посылать сообщения при помощи window.postMessage. Content script способен обрабатывать такие сообщения и далее передавать их в расширение.

    Пример из официальной документации
    Ответ написан
    Комментировать