【问题标题】:Cant make Tinymce edit iframe to work with tabbifier无法使 Tinymce 编辑器 iframe 与增粘剂一起使用
【发布时间】:2012-10-16 14:49:12
【问题描述】:

我正在尝试让 tinymce edit iframe 与这个美妙的 tabbifier 一起工作:

http://www.barelyfitz.com/projects/tabber

我已经成功安装了它们,并且它们工作得很好。

在我的示例中,我测试了以下内容:

  1. 加载一个 tinymce 组件并将以下代码保存在带有 HTML 选项的 tinymce iframe 中: 测试
  2. F5刷新后完美保存结果,并保存在数据库中:
<p>test</p>

tinymce 运行良好。

我进行的下一个测试是使用 tabber:

  1. 编辑 tinymce 组件框并使用 HTML 选项保存以下代码:
<div class='tabber' id='tabber1'>
    <div class='tabbertab' title='FIRSTTAB' >
        test firsttab
    </div>
    <div class='tabbertab' title='SECONDTAB' >
        test secondtab
    </div>
</div>
  1. 代码完美保存在数据库中,结果完美加载到输出视图中,显示两个选项卡,每个选项卡都有其内容。

  2. 问题是在尝试使用 tinymce 再次编辑内容时,选项卡未显示。内容完美加载到 tinymce iframe 中,没有标签。如下图:

    测试第一个标签

    测试第二个标签

里面的HTML代码不错,之前保存了正确的tabbifier html代码。

问题可能是 tinymce 的 iframe 无法加载或解释 tabber.js 的 javascript 并且它不显示选项卡。 我已经测试了使用此代码在 tinymce iframe 中加载 tabber.js 的 javascript,并且似乎加载了它,但仍然没有显示选项卡:

<script type="text/javascript">
      tinyMCE.init({
        mode:                              "exact",
        elements:                          "%s",
        theme:                             "%s",
        %s
        %s
        theme_advanced_toolbar_location:   "top",
        theme_advanced_toolbar_align:      "left",
        theme_advanced_statusbar_location: "bottom",
        theme_advanced_resizing:           true
        %s
            setup : function(ed)
            {
                ed.onInit.add(function(ed, evt)
                {
                    alert("entered tiny");
                    // Load a script from a specific URL using the global script loader
                    //tinymce.ScriptLoader.load('/js/tabber/tabber.js');
                    // Load a script using a unique instance of the script loader
                    //var scriptLoader = new tinymce.dom.ScriptLoader();
                    //scriptLoader.load('C:\tabber.js');

                    // Load multiple scripts
                    var scriptLoader = new tinymce.dom.ScriptLoader();
                    scriptLoader.add('/js/tabber.js');
                    scriptLoader.loadQueue(function() { alert('All scripts are now loaded.'); });
                });
            }
      });
</script>

我还检查了 /js/tabber.js 是正确的路径。并在萤火虫看到它正在加载它。 显示了两条警报消息,因此似乎加载了它,但是仍然没有显示tinymce编辑iframe中的选项卡。

欢迎任何帮助,非常感谢。

【问题讨论】:

  • 您正试图让标签在富文本编辑器中工作 - 这没有任何意义!您应该改为在选项卡内呈现编辑器。
  • 富文本编辑器并非旨在实现 javascript 应用程序。他们可以渲染一些 HTML 和一些 CSS。但它们不是浏览器,它们是添加了富文本增强功能的文本编辑器。
  • 我理解它,如果我不能让它工作,那是我的第二件事。我认为可能 tinymce 支持执行和呈现 javascript 输出,因为它允许使用 scriptLoader 在其中执行 javascript。是的,正如您所说,最好的选择是为每个选项卡单独呈现一个富编辑器。我想避免这个选项,因为我不想在我的数据库中添加很多列,每个选项卡都有一个具有丰富内容编辑器的列。但似乎是唯一的方法,非常感谢:)
  • 这和你解释的 Stefan 完全一样,只是用 CKEditor 测试过,结果完全一样。
  • 这并不一定意味着您必须将列添加到数据库中,尽管通常将字段尽可能分开是一个好主意。通过使用唯一的分隔符来分隔各个字段,可以将一些字段值合并到一个字段中 - 但前提是您确实必须这样做!然后您可以从数据库中读取单个字段并使用 php explode 或 js split 来提取单个字段值。但总的来说,我肯定会尽可能推荐单独的列。

标签: javascript jquery tabs tinymce


【解决方案1】:

tinymce ScriptLoader 确实在 iframe 中加载脚本。它提供了一种在tinymce 初始化后在主窗口 中加载脚本的方法。由于没有记录,这非常令人困惑。

但你肯定可以在 iframe 中加载脚本。这是魔法:

tinymce.init( { setup : function( ed ) {
    ed.on('init', function (args) {
        // get the iframe DOM
        var doc = args.target.contentDocument || args.target.contentWindow.document;

        // inject script into the DOM
        var s = doc.createElement('script');
        s.type = 'text/javascript';
        s.src = '/js/tabber.js';
        doc.getElementsByTagName('head')[0].appendChild(s);
    });
});

【讨论】:

  • 你应该获得奖牌!
【解决方案2】:

一些浏览器在段落开头存在空格和制表符问题。 空间的一种解决方法是将它们在 onSave 编码为受保护的空间(如果它们位于开头)。选项卡的解决方案是使用另一个具有类似行为的字符并在保存时替换它们。从数据库重新加载到编辑器时需要重新编码内容。

【讨论】:

  • 你最常使用的浏览器是什么?
  • 我正在使用 Firefox、Internet Explorer 和 Chrome 最新版本测试这个问题。在任何浏览器中,tinymce 标签都不会显示在其编辑框内。
  • 你能创建一个 tinymce fiddle (fiddle.tinymce.com) 来演示这个问题吗?
  • 感谢您对 Thariama 的关注。我在这里创建了一个简单的示例,清楚地显示了问题:fiddle.tinymce.com/nocaab/24
  • 正如我已经说过的那样 - 浏览器在段落的开头将它们踢出(就像使用空格一样)
猜你喜欢
  • 1970-01-01
  • 2017-06-05
  • 1970-01-01
  • 2012-10-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-02
  • 1970-01-01
相关资源
最近更新 更多