CKEditor脚本不适用于繁重的HTML页面

时间:2014-03-29 20:57:25

标签: ruby-on-rails ruby ruby-on-rails-4 ckeditor

我试图在Rails 4.0.3中使用CKEditor gem。我根据文档设置了所有内容,但它不起作用。

我有一个主项目,其中包含许多html元素的页面。在此页面中,CKEditor不起作用,并且不会在服务器端或客户端(Javascript)上发出任何错误或警告。

但是当我创建一个测试项目并应用相同的设置时,它就有效了!

经过大量的挣扎,我终于得出了这个结论:

CKEditor在应该转换的textarea之后插入一些Javascript。这是代码:

//<![CDATA[
    if (typeof CKEDITOR != 'undefined') { CKEDITOR.replace('article_body'); }
//]]>

我认为问题在于,在包含许多html元素的页面上,上面的代码在DOM完全加载之前运行,因此它没有任何效果。但是在另一个页面上,DOM会快速加载并且代码会及时运行。

验证我的假设的一件事是,如果我在Chrome开发者工具中运行上面的Javascript代码&#39;控制台,当页面完全加载后,它确实有效。

我不知道我是否正确,但假设我是对的,如何在DOM完全加载时强制执行上面的代码?

1 个答案:

答案 0 :(得分:0)

我发现了问题。这是因为我搬了

<%= stylesheet_link_tag "application" %>

在结束体标记之前行到文件末尾。这一行:

//<![CDATA[
    if (typeof CKEDITOR != 'undefined') { CKEDITOR.replace('article_body'); }
//]]>

在加载任何其他Javascript文件之前执行,因此它什么也没做。

解决方案:

一种方法是将stylesheet_link_tag行移至文件顶部(我不喜欢)。

另一种方法是将名为ckeditor的CSS类添加到要转换的textarea中。例如:

= form_for @article do |f|
    = f.text_area :body, class: "ckeditor"

这将告诉CKEditor将该textarea转换为WYSIWYG编辑器。