2015-09-17 56 views
1

我正在創建一個瀏覽器擴展,其中我使用jQuery Range2DSlider插件v1.0.5。如果安裝在Chrome中,滑塊工作正常,但不能在Firefox中工作。顯示在Firefox中的錯誤信息是瀏覽器擴展中的jQuery Slider在Firefox中不工作

警告:Node.appendChild的參數1沒有實現接口 節點。函數名稱: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]); 

此代碼的工作,現在

相關問題