2012-04-03 60 views
0

UPDATE:问题是FF的.cloneNode()方法:http://jsfiddle.net/beCVL/1/Firefox和IE的转换原来的颜色值,RGB

我知道FF和IE浏览器在内部转换颜色为RGB,这会导致问题,因为颜色值不要与服务器上的内容不匹配。

证明:

Chrome 18: 
CKEDITOR.instances.selected_text_actual.getData() 
>> "s <span style="color: #ff0000">text</span>" 

FireFox 11: 
CKEDITOR.instances.selected_text_actual.getData() 
>> "s <span style="color: rgb(255, 0, 0);">text</span>" 

所以,我想解决这个问题的办法就是让CKEditor的数据处理器始终使用RGB值。有没有办法做到这一点?

我发现,这样的事情应该工作:

CKEDITOR.on('instanceReady', function(ev){ 
      var editor = ev.editor, 
       dataProcessor = editor.dataProcessor, 
       htmlFilter = dataProcessor && dataProcessor.htmlFilter; 

      // HTML 4 way to end tags 
      dataProcessor.writer.selfClosingEnd = '>'; 

      htmlFilter.addRules({ 
       elements:{ 
        $:function(element){ 
         var e = jQuery(element); 
         e.css("color", e.css("color")); // jquery auto converts to rgb 
        } 
       } 
      }); 

     }); 

来源:http://sebduggan.com/blog/customising-ckeditor-settings-in-mura/ 但是,没有任何改变。

到RGB的转换是非常直截了当:

a.attr("style", "color: #444") 
[ 
<div style=​"color:​ #444">​</div>​ 
] 
a.css("color", a.css("color")); 
[ 
<div style=​"color:​ rgb(68, 68, 68)​;​ ">​</div>​ 
] 

编辑:问题是FF的.cloneNode()方法:http://jsfiddle.net/beCVL/1/

+1

“颜色值与服务器上的内容不匹配”是什么意思?字符串明智?因为'rgb(255,0,0)'正好是'#ff0000'。 – Bojangles 2012-04-03 00:16:46

+0

这是不准确的。一个是十六进制,另一个是RGB。我认为我很直率,但是.. idk。 = \ – NullVoxPopuli 2012-04-03 00:17:34

+0

您是指每种符号产生的颜色,还是实际的符号本身? – Bojangles 2012-04-03 00:18:18

回答

0

如果要比较两个颜色值的每一个可以以几种不同的方式表示,那么你必须确保两者都转换为规范形式(例如完全相同的形式)。

所以,你可以使用rgb(x,y,z)作为规范的形式,如果你想要的,但你必须确保任何颜色值表示为#xyz#xxyyzz是在比较之前先转换为RGB格式。

这里有颜色的三个值全部转换为rgb(x,y,z)不带空格的功能,然后将它们和返回的结果与你:

function colorsAreSame(c1, c2) { 
    var space = /\s+/g; 

    function makeRGB(c) { 
     var r, g, b; 
     c = c.replace(space, ""); 
     if (c.charAt(0) == "#") { 
      if (c.length == 4) { 
       r = parseInt(c.charAt(1), 16); 
       r = (r * 16) + r; 
       g = parseInt(c.charAt(2), 16); 
       g = (g * 16) + g; 
       b = parseInt(c.charAt(3), 16); 
       b = (b * 16) + b; 
      } else if (c.length == 7) { 
       r = parseInt(c.substr(1, 2), 16); 
       g = parseInt(c.substr(3, 2), 16); 
       b = parseInt(c.substr(5, 2), 16); 
      } 
      return "rgb(" + r + "," + g + "," + b + ")"; 
     } else { 
      return(c); 
     } 
    } 
    c1 = makeRGB(c1); 
    c2 = makeRGB(c2); 
    return(c1 == c2); 
} 
1

正如我在http://cksource.com/forums/viewtopic.php?f=11&t=25141回答你,你可以使用原来的“输出HTML“示例,其中包含已链接并使用convertRGBToHex函数的博客中复制的完整代码。

而BTW,Firefox尊重风格,目前唯一改变该部分的浏览器是IE。

+0

但是,为什么FF中的CKeditor返回的内容与Chrome中的CKeditor不同? – NullVoxPopuli 2012-04-03 14:19:47

+0

对我而言,他们返回相同的东西。我不知道你是如何执行你的测试。我的测试是:去http://ckeditor.com/demo,清除内容并输入hello。选择全部并应用颜色,切换到源。我得到这个:

你好

AlfonsoML 2012-04-03 15:40:13

+0

这就是我如何得到的文本:\t \t var yourEditor = CKEDITOR.instances.selected_text_actual; \t \t var formattedDataForWysiWyg = yourEditor.dataProcessor.toHtml(yourEditor.getData()); \t \t var temp_sel = yourEditor.dataProcessor.toDataFormat(formattedDataForWysiWyg); – NullVoxPopuli 2012-04-03 16:28:19

0

克隆节点改变样式属性的事实几乎可以肯定是Gecko中的bug,但同时element.style.color在两种情况下都会返回rgb(255, 0, 0)