解决方案:下面的问题是由一个覆盖核心javascript函数的Divx javascript引起的。感谢aeno发现了这一点并且对Divx编码器感到羞耻!
问题:点击工具栏中的插入图片按钮在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 :(得分:4)
HI,
我正在处理打开prettyPhoto图库时出现的完全相同的问题... 我不知道这个“脚本块”来自哪里,但肯定会导致错误。
那么,有没有人知道这个可疑的脚本块?
谢谢, aeno
修改强> 再多一点谷歌搜索了它:上面提到的脚本块来自安装在InternetExplorer中的DivX插件。停用DivX插件突然解决了问题,并且prettyPhoto打开非常流畅:)
现在我必须弄清楚DivX开发者是否有bug追踪器......