Исходный файл JavaScript не загружается в IE8 Popup - PullRequest
1 голос
/ 01 июня 2010

У меня проблема с загрузкой исходного файла JavaScript для IE6, Chrome, Firefox, Safari и Opera. Но тот же исходный файл не загружается в IE8.

В результате этого HTML не заменяется во всплывающем окне , и я получаю сообщение об ошибке в всплывающем окне IE8, говорящее tinyMCE is not defined

Я ссылался на Форматирование этой строки JavaScript и решил проблему во всех браузерах, кроме IE8.

Функция JavaScript выглядит следующим образом:

function openSupportPage() {
    var features="width=700,height=400,status=yes,toolbar=no,menubar=no,location=no,scrollbars=yes";            
    var winId=window.open('','',features);
    winId.document.open();
    winId.document.write('<html><head><title>' + document.title + '</title><link rel="stylesheet" href="../css/default.css" type="text/css">\n');

    var winDoc = winId.document;
    var sEl = winDoc.createElement("script");
    sEl.src = "../js/tiny_mce/tiny_mce.js";/*TinyMCE source file*/
    sEl.type="text/javascript";
    winDoc.getElementsByTagName("head")[0].appendChild(sEl);

    winId.document.write('<script type="text/javascript">\n');
    winId.document.write('function inittextarea() {\n');
    winId.document.write('tinyMCE.init({  \n');  
    winId.document.write('elements : "content",\n');
    winId.document.write('theme : "advanced",\n');
    winId.document.write('readonly : true,\n');
    winId.document.write('mode : "exact",\n');
    winId.document.write('theme : "advanced",\n');
    winId.document.write('readonly : true,\n');
    winId.document.write('setup : function(ed) {\n');
    winId.document.write('ed.onInit.add(function() {\n');
    winId.document.write('tinyMCE.activeEditor.execCommand("mceToggleVisualAid");\n');
    winId.document.write('});\n');
    winId.document.write('}\n');
    winId.document.write('});}</script>\n');

    window.setTimeout(function () {/*using setTimeout to wait for the JS source file to load*/
        winId.document.write('</head><body onload="inittextarea()">\n');
        winId.document.write('  \n');
        var hiddenFrameHTML = document.getElementById("HiddenFrame").innerHTML;
        hiddenFrameHTML = hiddenFrameHTML.replace(/&amp;/gi, "&");
        hiddenFrameHTML = hiddenFrameHTML.replace(/&lt;/gi, "<");
        hiddenFrameHTML = hiddenFrameHTML.replace(/&gt;/gi, ">");
        winId.document.write(hiddenFrameHTML); 
        winId.document.write('<textarea id="content" rows="10" style="width:100%">\n');
        winId.document.write(document.getElementById(top.document.forms[0].id + ":supportStuff").innerHTML);
        winId.document.write('</textArea>\n');
        var hiddenFrameHTML2 = document.getElementById("HiddenFrame2").innerHTML;
        hiddenFrameHTML2 = hiddenFrameHTML2.replace(/&amp;/gi, "&");
        hiddenFrameHTML2 = hiddenFrameHTML2.replace(/&lt;/gi, "<");
        hiddenFrameHTML2 = hiddenFrameHTML2.replace(/&gt;/gi, ">");
        winId.document.write(hiddenFrameHTML2); 
        winId.document.write('</body></html>\n');
        winId.document.close();
    }, 300);
}

Дополнительная информация :

пожалуйста, помогите мне с этим.

1 Ответ

1 голос
/ 01 июня 2010
  1. Почему вы используете фактические функции DOM для добавления тега <script>, который включает tinymce.js, но все остальное использует document.write?

  2. Я думаю, в этом и заключается ваша проблема, так как <head> находится внутри <html>, который еще не закрыт, где вы хотите добавить указанный тег <script>.

  3. В противном случае вы можете использовать существующий тег <script> во всплывающем окне, чтобы добавить код, который включает в себя необходимый внешний файл javascript. Если это имеет смысл.

Итак, в основном я говорю, попробуйте это так же, как все остальное в вашем скрипте, используя document.write.

(быстрое добавление) Я не говорю, что это «лучший» способ сделать это, я бы порекомендовал создать реальную страницу вместо динамического создания во всплывающем окне. Но в этом сценарии я думаю, что то, что я написал ранее, может решить вашу проблему.

...