2011-04-30 88 views
2

解决方案:下面的问题是由覆盖核心JavaScript函数的Divx JavaScript引起的。感谢aeno发现这一点,并感谢在Divx编码器上做到这一点的人们!IE8 tinyMCE .NET插入图像

问题:单击tinymce工具栏中的插入图像按钮不会在IE8中执行任何操作。

描述:忍受我在这里。我不认为这个问题与tinymce有关,这可能是IE8的错,但我需要比我更聪明的人帮助解决最后一块难题,以找出谁来负责这件事......

所以基本上我在Visual Studio 2010中使用tinyMCE,并且如上所述解决了问题。所以我切换到tinyMCE源代码来调试。这个问题似乎在这片在inlinepopups/editor_plugin_src.js代码,行358的发生:

_addAll : function(te, ne) { 
    var i, n, t = this, dom = tinymce.DOM; 

    if (is(ne, 'string')) 
     te.appendChild(dom.doc.createTextNode(ne)); 
    else if (ne.length) { 
     te = te.appendChild(dom.create(ne[0], ne[1])); 

     for (i=2; i<ne.length; i++) 
     t._addAll(te, ne[i]); 
    } 
}, 

的代码是准确的线,

te = te.appendChild(dom.create(ne[0], ne[1])); 

在IE8 Te为null,因为TE .appendChild不返回任何内容。

为了给出一些关于代码的背景信息,te是一个DOM.doc.body对象,ne似乎是一个包含需要创建的内联弹出对象结构的json对象。

所以回到代码..这适用于所有其他浏览器没有问题。所以我进入函数appendChild,并将其带入一些“JScript - 脚本块[动态]”文件,这是不可想象的。它覆盖doc.body.appendChild功能...您可以在下面看到它,

code cut out 
... 
    var appendChildOriginal = doc.body.appendChild; 
    doc.body.appendChild = function(element) 
    { 
     appendChildOriginal(element); 
     var tag = element.tagName.toLowerCase(); 

     if ("video" == tag) 
     { 
      ProcessVideoElement(element); 
     } 
    } 
... 
code cut out 

在这里我们可以很明显的看出什么地方出了错。当然,te.appendChild不会返回任何内容......它没有返回语句!

所以这个难题的最后一块是wtf是这个动态脚本块吗?我不能为上帝的爱找出这个脚本块来自哪里(VS2010不起作用)。我最深的怀疑是,这是IE8内置?任何人都可以对此有所了解吗?下面我提供了一些更多这个神秘的脚本块,以防万一任何人都能找出它来自哪里。我现在可以向你保证一件事,它不属于我们项目中的任何脚本,因为我们已经完成搜索,并且没有任何东西出现。

var doc; 
var objectTag = "embed"; 

// detect browser type here 
var isInternetExplorer = (-1 != navigator.userAgent.indexOf("MSIE")); 
var isMozillaFirefox = (-1 != navigator.userAgent.indexOf("Firefox")); 
var isGoogleChrome = (-1 != navigator.userAgent.indexOf("Chrome")); 
var isAppleSafari = (-1 != navigator.userAgent.indexOf("Safari")); 

// universal cross-browser loader 
if (isInternetExplorer) 
{ 
    // use <object> tag for Internet Explorer 
    objectTag = "object"; 
    // just execute script 
    ReplaceVideoElements(); 
} 
else if (isMozillaFirefox) 
{ 
    // listen for the 'DOMContentLoaded' event and then execute script 
    function OnDOMContentLoadedHandled(e) 
    { 
     ReplaceVideoElements(); 
    } 

    window.addEventListener("DOMContentLoaded", OnDOMContentLoadedHandled, false); 
} 
else if (isGoogleChrome) 
{ 
    // just execute script 
    ReplaceVideoElements(); 
} 
else if (isAppleSafari) 
{ 
    // listen for the 'DOMContentLoaded' event and then execute script 
function OnDOMContentLoadedHandled(e) 
{ 
     ReplaceVideoElements(); 
} 
window.addEventListener("DOMContentLoaded", OnDOMContentLoadedHandled, false); 
} 

function MessageHandler(event) 
{ 
    //window.addEventListener("load", OnLoad, false); 
} 

// replacing script 
function ReplaceVideoElements() 
{ 
    if (isMozillaFirefox) 
    { 
     doc = window.content.document; 
    } 
    else 
    { 
     doc = document; 
    } 

    // set up DOM events for Google Chrome & Mozilla Firefox 
    if (isMozillaFirefox || isGoogleChrome || isAppleSafari) 
    { 
     doc.addEventListener("DOMNodeInserted", onDOMNodeInserted, false); 
     doc.addEventListener("DOMNodeInsertedIntoDocument", onDOMNodeInsertedIntoDocument, false); 
    } 
    // HACK : override appendChild, replaceChild, insertBefore for IE, since it doesn't support DOM events 
    if (isInternetExplorer) 
    { 
     var appendChildOriginal = doc.body.appendChild; 
     doc.body.appendChild = function(element) 
     { 
      appendChildOriginal(element); 
      var tag = element.tagName.toLowerCase(); 

      if ("video" == tag) 
      { 
       ProcessVideoElement(element); 
      } 
     } 

     var replaceChildOriginal = doc.body.replaceChild; 
     doc.body.replaceChild = function(element, reference) 
     { 
      replaceChildOriginal(element, reference); 
      var tag = element.tagName.toLowerCase(); 

      if ("video" == tag) 
      { 
       ProcessVideoElement(element); 
      } 
     } 

     var insertBeforeOriginal = doc.body.insertBefore; 
     doc.body.insertBefore = function(element, reference) 
     { 
      insertBeforeOriginal(element, reference); 
      var tag = element.tagName.toLowerCase(); 

      if ("video" == tag) 
      { 
       ProcessVideoElement(element); 
      } 
     } 
    } 
... 
code cut out 
+0

如果这是使用tinymce的新生产版本发生的,你应该写一个bug报告(http://tinymce.moxiecode.com/develop/bugtracker_bugs.php) – Thariama 2011-05-02 08:56:22

回答

4

HI,

我处理相同问题打开prettyPhoto画廊时存在的...... 我不知道在哪里这个“脚本块”是从哪里来的,但它肯定会导致错误。

那么,有没有人知道这个可疑的脚本块的任何东西?

感谢, aeno

编辑: 多一点谷歌搜索提供一些线索到它:所提脚本块来自于浏览器安装在InternetExplorer的DivX的插件。取消激活DivX插件突然解决了问题,prettyPhoto打开相当顺利:)

现在我必须弄清楚DivX开发者是否有bug跟踪器...

+0

好吧,我会被诅咒的!我也尝试过使用Google搜索。我想知道你用什么关键词heh:P – Thirlan 2011-05-04 06:15:34

+0

我会试试看看它是否修复它。 – Thirlan 2011-05-04 06:15:52

+0

我刚刚搜索了一段javascript代码:) – aeno 2011-05-05 11:02:53