Справочная задача jquery Thickbox - PullRequest
4 голосов
/ 20 марта 2011

Полностью переформулировал мой вопрос:

Проблема: потеря ссылки на iFrame с Mozilla firefox 3.6 и 4.0

Дополнительная информация: - Отлично работает в Internet Explorer 8 64-битной и 32-битнойверсия.

Как воспроизвести?В Mozilla: Откройте редактор аккордеонного меню.Нажмите на ссылку «редактор открыт», в редакторе введите произвольный текст, затем нажмите «bestand opslaan».Введите имя и нажмите «Сохранить».Содержимое редактора будет загружено в формате HTML.

Закройте диалоговое окно сохранения файла, щелкнув снаружи или на указанных кнопках.Снова нажмите кнопку «bestand opslaan» и попытайтесь сохранить свой контент в файл.Вы ничего не увидите.

Проблема не в IE8.Попробуйте открыть его там.

Firebug сообщает мне об этом во второй раз, когда вы открываете диалоговое окно сохранения:

iFrame.document is null

Пример ссылки: http://www.newsletter.c -tz.nl /

Дополнительная информация: - переключился с Thickbox на Colorbox, чтобы попытаться решить эту проблему, и потому что теперь ящик с поддержкойboxbox давно не поддерживается.- Colorbox дает мне ту же проблему, поэтому я не думаю, что это так.- Попробовал поискать ошибку iframe и т.п., ничего не нашел.- попытался поместить код iframe вне div, который вызывается скриптом colorbox, он сохраняет его ссылку, но не когда я помещаю его обратно в этот div.

Спасибо: JohnP, который предложил открыть охоту'на этом.

Редактировать:

Я подумал, что, возможно, файл saveFile.php вызывает проблемы у родителя iframe, но после удаления его из переменной action в сценарии editor.php онпо-прежнему происходит сбой с той же ошибкой после повторного открытия диалогового окна.

Может кто-нибудь написать сценарий, который выполняет итерацию по фреймам по имени, и когда найденный ригрань фрейм ссылается на него в var?Я хочу попробовать, но не знаю как ...

1 Ответ

2 голосов
/ 25 марта 2011

Я не могу объяснить, почему это работает в первый раз для Firefox, но в Firefox функция, используемая для получения iframe, отличается от IE: Как получить содержимое тела iframe в Javascript? .

Итак, замените вашу функцию JavaScript "saveToFile" на эту:

function saveToFile() {
    var saveAsFileName = document.getElementById('saveAs_filename').value;
    var currentContent = tinyMCE.editors["editor_textarea"].getContent();
    var editorFileName = document.getElementById('editor_filename');

    var iFrameTag =  document.getElementById('saveAs_Iframe');
    var iFrame;
    if ( iFrameTag.contentDocument ) 
    { // FF
        iFrame = iFrameTag.contentDocument;
    }
    else if ( iFrame.contentWindow ) 
    { // IE
        iFrame = iFrameTag.contentWindow.document;
    }

    var inframeEditorFileName = iFrame.getElementById('editor_filename');
    var inframeEditorContent = iFrame.getElementById('editor_textarea');

    editorFileName.value = saveAsFileName;
    inframeEditorFileName.value = saveAsFileName;
    inframeEditorContent.value = currentContent;

    iFrame.editor_self.submit();
}

Я заменяю функцию Firebug, и она работает для меня.

Обновление: Вы также можете использовать кросс-браузерное решение, более простое, благодаря jQuery:

function saveToFile() {
    var saveAsFileName = document.getElementById('saveAs_filename').value;
    var currentContent = tinyMCE.editors["editor_textarea"].getContent();
    var editorFileName = document.getElementById('editor_filename');
    editorFileName.value = saveAsFileName;

    $("#saveAs_Iframe").contents().find("#editor_filename").val(saveAsFileName)
    $("#saveAs_Iframe").contents().find("#editor_textarea").val(currentContent)
    $("#saveAs_Iframe").contents().find("form[name=editor_self]").submit();
}
...