1

Я создаю расширение браузера, в котором я использую jQuery Range2DSlider plugin v1.0.5. Ползунок работает, если установлен в Chrome, но не работает в firefox. Сообщение об ошибке показывает в светлячок являетсяjQuery Slider в расширении браузера не работает в firefox

Предупреждение: Аргумент 1 из Node.appendChild не реализует интерфейс Node. Имя функции: appAPI.message.addListener Пользовательский обратный вызов

Эта ошибка возникает, когда бегунок слайдера добавляется к ползунку. Код в плагине Range2DSlider для добавления бегуна выглядит следующим образом.

// create runners 
var $runner; 
for(i=0;i<_this.values.length;i++){ 
    if(!_this.$runners[i]){ 
     _this.$runners.push($runner = $('<div class="xdsoft_range2dslider_runner xdsoft_range2dslider_runner'+i+'"></div>')); 
     $runner.append($inrunner = $('<input type="button">')); 
     $runner[0].ranges = []; 
     $runner.addClass('xdsoft_range2dslider_'+_this.options.runnerClassSkin.xd(i)); 
     !function(i){ 
      $inrunner 
       .on('focus',function(){ 
        $('.xdsoft_range2dslider_active').removeClass('xdsoft_range2dslider_active'); 
        $(this).parent().addClass('xdsoft_range2dslider_active'); 
       }) 
       .on('keydown',function(event){ 
        var relX = _this.values[i][0], 
         relY = _this.values[i][1], 
         ax = _this.options.allowAxisMove.xd(0,'both'); 
        switch(event.which){ 
         case ARROWUP: 
          if(ax=='both'||ax=='y'){ 
           relY+=_this.options.stepOnKey.xd(1); 
          } 
         break; 
         case ARROWDOWN: 
          if(ax=='both'||ax=='y'){ 
           relY-=_this.options.stepOnKey.xd(1); 
          } 
         break; 
         case ARROWRIGHT: 
          if(ax=='both'||ax=='x'){ 
           relX+=_this.options.stepOnKey.xd(0); 
          } 
         break; 
         case ARROWLEFT: 
          if(ax=='both'||ax=='x'){ 
           relX-=_this.options.stepOnKey.xd(0); 
          } 
         break; 
         default: return true; 
        } 
        setValue(_this,i,relX,relY); 
        event.stopPropagation(); 
        event.preventDefault(); 
       }); 
     }(i); 
    }else{ 
     for(var t=0;t<_this.$runners[i][0].ranges.length;t++) 
      _this.$runners[i][0].ranges[t].rect.remove(); 
     _this.$runners[i][0].ranges = []; 
    } 
} 

// for second init remove extra sliders 
for(i=_this.values.length;i<_this.$runners.length;i++){ 
    _this.$runners[i].remove(); 
} 
_this.$runners.length = _this.values.length; 

if($.isArray(_this.options.showRanges)&&_this.options.showRanges.length&&_this.values.length>1){ 
    var range,$range ; 
    for(i=0;i< _this.options.showRanges.length;i++){ 
     rangeBetween = _this.options.showRanges.xd(i); 
     if(rangeBetween && $.isArray(rangeBetween) && rangeBetween.length && rangeBetween[0]!=rangeBetween[1] && _this.$runners[rangeBetween[0]] && _this.$runners[rangeBetween[1]]){ 
      $range = $('<div class="xdsoft_range2dslider_range xdsoft_range2dslider_range'+i+'"></div>');     
      _this.$runners[rangeBetween[0]][0].ranges.push({rect:$range,rb:rangeBetween}); 
      _this.$runners[rangeBetween[1]][0].ranges.push({rect:$range,rb:rangeBetween}); 
      _this.$sliderBox.append($range); 
      $range.on('mousedown',function(e){ 
       e.stopPropagation(); 
      }); 
     } 
    } 
} 


_this.$sliderBox 
    .css({ 
     height:_this.options.height, 
     width:_this.options.width 
    }) 
    .append(_this.$runners); 

Любая помощь была бы принята с благодарностью. Заранее спасибо

+0

Сообщение указывает на ошибку в функции обратного вызова сообщение слушателю, в частности, что-то делать с appAPI.appendChild. Глядя на полный код extension.js, я вижу, что вы используете appendChild в нескольких местах. Я предлагаю вам начать отладку по методу appendChild. [** Раскрытие информации: ** Я сотрудник Crossrider] – Shlomo

ответ

1

Здесь _this. $ Runners - это объект jQuery. Метод append принимает только элементы DOM. изменение объекта jQuery на элемент DOM делает трюк.

_this.$sliderBox 
    .css({ 
     height:_this.options.height, 
     width:_this.options.width 
    }) 
    .append(_this.$runners[0]); 

Этот код работает сейчас

Смежные вопросы