Полезная информация

Общайтесь со знакомыми и друзьями в нашем сообществе в Facebook.

№114-08-2007 17:16:06

lycan
Участник
 
Группа: Members
Зарегистрирован: 13-08-2007
Сообщений: 12
UA: Firefox 2.0

iframe + designMode, динамическая загрузка CSS

Пытаюсь динамический загрузить CSS, для iframe

Выделить код

Код:

var jsEditorBaseUrl = false;

var elements = document.getElementsByTagName("script");
for (var i = 0; i < elements.length; i++)
{
    if (elements[i].src && (elements[i].src.indexOf("jseditor.js") != -1)) 
    {
        var src = elements[i].src;
        jsEditorBaseUrl = src.substring(0, src.lastIndexOf('/'));
        break;
    }
}

var jsEditorPathCSS = jsEditorBaseUrl + "/css/";
var jsEditorPathImg = jsEditorBaseUrl + "/img/";

// функция для загрузки
function importCSSToDoc(doc, cssFileName) {
    var styleSheet = doc.createElement("link");
    styleSheet.setAttribute("href", jsEditorPathCSS + cssFileName);
    styleSheet.setAttribute("rel", "stylesheet");
    styleSheet.setAttribute("type", "text/css");
    var head = doc.getElementsByTagName("head");
    head[0].appendChild(styleSheet);
}

Function.prototype.bind = function(object) {
    var method = this
    return function() {
        return method.apply(object, arguments) 
    }
}
// загружаем для этого документа
importCSSToDoc(document, "jseditor.css");

function actionEvent(instance, action)
{
    this.instance = instance;
    this.action   = action;
}

function jsEditor(name, content)
{
    this.name    = name;
    this.content = content;
}

jsEditor.prototype = {
    executeAction : function(action) 
    {
        alert("instance : " + this.name + ", action : " + action);
    },

    createToolbarFromArray : function(toolbarCell, arrayToolbar) 
    {
        var instanceName = this.name;
        for (i in arrayToolbar)
        {
            var image = document.createElement("img");
            image.setAttribute("src", jsEditorPathImg + arrayToolbar[i][2]);
            image.setAttribute("class", "jseditor-button");
            
            image.onclick = function()
            {
                this.instance.executeAction(this.action);
            }.bind(new actionEvent(this, arrayToolbar[i][1]));

            image.onmouseover = function()
            {
                this.id = "js-button-selected";
            }
            image.onmouseout = function()
            {
                this.id = "";
            }
            toolbarCell.appendChild(image);
        }
    },

    createSeparator : function(toolbarCell)
    {
        var image = document.createElement("img");
        image.setAttribute("src", jsEditorPathImg + "separator.png");
        image.setAttribute("class", "jseditor-separator");
        toolbarCell.appendChild(image);
    },

    createToolbar : function(toolbarCell) 
    {
        var arrayFontStyleToolbar =
        [
            ['Калын',         'Bold',          'bold.png'],
            ['Курсив',        'Italic',        'italic.png'],
            ['Подчеркнытый',  'Underline',     'underline.png'],
            ['Перечеркнутый', 'StrikeThrough', 'strikethrough.png'] 
        ];
        var arrayAdditionalToolbar =
        [
            ['Рәсем куярга',  'InsertImage',   'insertimage.png']
        ];


        if (this.enableFontStyleToolbat)
        {
            this.createToolbarFromArray(toolbarCell, arrayFontStyleToolbar);
        }
        if (this.enableAdditionToolbar)
        {
            this.createSeparator(toolbarCell);
            this.createToolbarFromArray(toolbarCell, arrayAdditionalToolbar);
        }
        return toolbarCell;
    },

    getDoc : function() 
    {
        return this.iFrame.contentDocument;
    },

    createIFrame : function()
    {
        this.iFrame = document.createElement("iframe");
        this.iFrame.setAttribute("class", "jseditor-iframe");
        this.iFrame.onload = function()
        {
            // загружаем для ifamre
            importCSSToDoc(this.contentDocument, "jseditor-iframe.css");
            this.contentDocument.designMode = 'on';
        }

        return this.iFrame;
    },

    create : function()
    {
        var table = document.createElement("table");
        table.setAttribute("class", "jseditor-conteiner");
        table.setAttribute("cellpadding", "0");
        table.setAttribute("cellspacing", "0");

        var toolbarRow = table.insertRow(0);
        var iFrameRow  = table.insertRow(1);

        var toolbarCell = toolbarRow.insertCell(0);
        toolbarCell.setAttribute("id", "toolbar-cell");
        this.createToolbar(toolbarCell);

        var iFrameCell = iFrameRow.insertCell(0);
        iFrameCell.setAttribute("id", "iframe-cell");
        iFrameCell.appendChild(this.createIFrame());

        document.body.insertBefore(table, null);

    }
}

FireBug показывает, что <link /> подключен к iframe, но стили не применяются, но при этом стили относящиеся к главной странице действуют. Даже незняю в какую сторону смотреть, помогите пожалуйста!


Наши знания делают нас уникальными.

Отсутствует

 

№214-08-2007 22:33:38

Dark-Demon
Участник
 
Группа: Members
Зарегистрирован: 20-02-2006
Сообщений: 1278
UA: Granparadiso 3.0

Re: iframe + designMode, динамическая загрузка CSS

а консоль ошибок что показывает? а вообще, это точно необходимо css грузить динамически?

Отредактировано Dark-Demon (14-08-2007 22:34:45)


!

Отсутствует

 

№315-08-2007 08:05:04

Shutnik
Участник
 
Группа: Extensions
Зарегистрирован: 12-11-2005
Сообщений: 3785

Re: iframe + designMode, динамическая загрузка CSS

по моему у вас опять проблема в this:

Выделить код

Код:

// загружаем для ifamre
            importCSSToDoc(this.contentDocument, "jseditor-iframe.css");

p.s.: старайтесь приводить коды меньших размеров

Отсутствует

 

№415-08-2007 14:21:56

lycan
Участник
 
Группа: Members
Зарегистрирован: 13-08-2007
Сообщений: 12
UA: Firefox 2.0

Re: iframe + designMode, динамическая загрузка CSS

по моему у вас опять проблема в this:

в данном случае все правильно, этот "тот самый" this

Динамичаски загружать необходимо потому что CSS файл может находится в разных каталогах.

Проблему решил: указал для iframe аттрибут src на пустоу HTML файл, и потом добавил CSS динамичаский.

PS:

p.s.: старайтесь приводить коды меньших размеров

будем приводить поменьше(в следующий раз)

Спасибо за помощь!!!


Наши знания делают нас уникальными.

Отсутствует

 

№516-08-2007 08:04:43

Dark-Demon
Участник
 
Группа: Members
Зарегистрирован: 20-02-2006
Сообщений: 1278
UA: Granparadiso 3.0

Re: iframe + designMode, динамическая загрузка CSS

я делаю проще...

Выделить код

Код:

var edoc= frame.contentDocument || frame.contentWindow;
	if (edoc.document) edoc= edoc.document;
	edoc.open();
	edoc.write('<html><head><style>'+styles+'</style><script src="editor.js"></script></head><body>'+html+'</body></html>');
	edoc.close();

!

Отсутствует

 

№617-08-2007 09:52:50

lycan
Участник
 
Группа: Members
Зарегистрирован: 13-08-2007
Сообщений: 12
UA: Firefox 2.0

Re: iframe + designMode, динамическая загрузка CSS

Dark-Demon
Так неверное удобнее, но писать в документ напрямую я не люблю, один раз изза этого я долго мучался. Сейчас через DOM. так удобней и безопасней, только вот некоторIE браузеры не очень поддерживают их.


Наши знания делают нас уникальными.

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]