5

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

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

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

后来

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

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

更新:现在我已经设法用 setTimeout 来“解决”这个问题,但这似乎是一种非常丑陋的方法。

4

2 回答 2

6

几点:

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

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

$('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之类的回调。
于 2012-07-27T00:20:01.947 回答
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/

编辑:包括解决方案

于 2015-01-28T10:42:58.880 回答