解決方案:下面的問題是由覆蓋核心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
如果這是使用tinymce的新生產版本發生的,你應該寫一個bug報告(http://tinymce.moxiecode.com/develop/bugtracker_bugs.php) – Thariama 2011-05-02 08:56:22