Tinymce(有时)未定义

时间:2012-07-26 15:43:11

标签: jquery-plugins tinymce

我在我正在工作的项目中使用Tinymce(使用jQuery);我们使用富文本编辑器供用户输入信息;但是,有时加载页面时Firefox和Chrome会检测到“未定义的错误”错误(有时在代码的不同行),而其他时候页面加载就好了。奇怪的是,它与IE完美配合。

以下是我正在使用的一些代码:

view.find('textarea.rich-text').each(function () {        
   $(this).tinymce( /* ...rules... */);        
});  

后来

_variable.find("#summary").tinymce().setContent(content);

此行是错误(有时)被捕获的地方。在我看来,问题是一个加载问题,即使tinyMCE插件在此行之前初始化约5000行。

更新:目前我已经设法通过setTimeout“解决”问题,但这似乎是一种非常难看的方式。

2 个答案:

答案 0 :(得分:6)

几点:

  • 您没有提到TinyMCE初始化是否在jQuery ready事件函数中完成。当然应该是这样。

  • 您不需要每个循环。你可以说:

$('textarea.rich-text').tinymce({ script_url : '../js/tinymce/jscripts/tiny_mce/tiny_mce.js', theme : "advanced", ... });

  • 您不需要拨打find,因为您只是按ID选择。只是做:

$("#summary").tinymce().setContent(content);

  • 你真正的问题可能是当你收到错误时,tinymce还没有完成初始化。您看到它必须从配置的script_url加载脚本。这可能需要一段时间。因此,您必须使用回调,例如oninit

答案 1 :(得分:0)

如果您无法控制TinyMCE的init方法,则可以按照此解决方案进行操作。

jQuery(document).ready(function($) {

    function myCustomSetContent( id, content ) {
        // Check if TinyMCE is defined or not.
        if( typeof tinymce != "undefined" ) {
            var editor = tinymce.get( id );
            // Check if TinyMCE is initialized properly or not.
            if( editor && editor instanceof tinymce.Editor ) {
                editor.setContent( text );
                editor.save( { no_events: true } );
            } else {
                // Fallback
                // If TinyMCE is not initialized then directly set the value in textarea.
                //TinyMCE will take up this value when it gets initialized.
                jQuery( '#'+id ).val( text );
            }
            return true;
        }
        return false;
    }

    function myCustomGetContent( id ) {
        // Check if TinyMCE is defined or not.
        if( typeof tinymce != "undefined" ) {
            var editor = tinymce.get( id );
            // Check if TinyMCE is initialized properly or not.
            if( editor && editor instanceof tinymce.Editor ) {
                return editor.getContent();
            } else {
                // Fallback
                // If TinyMCE is not initialized then directly set the value in textarea.
                // TinyMCE will take up this value when it gets initialized.
                return jQuery( '#'+id ).val();
            }
        }
        return '';
    }

    $(".class-to-update-content").on("click", function(e) {
        myCustomSetContent( "tinymce-editor-id", "New Content in Editor" );
    });

    $(".class-to-get-content").on("click", function(e) {
        $("div.class-to-display-content").html( myCustomGetContent( "tinymce-editor-id" ) );
    });
});

参考:http://blog.incognitech.in/tinymce-undefined-issue/

编辑:包含解决方案