如何手动执行WYMeditor函数没有错误?

有关调试,请观看jquery.wymeditor.js

我需要从我的自定义工具栏(确切地说,功能区)通过JavaScript执行“Strong”,“I​​ndent”等命令并且没有错误。 80%完成,我可以执行命令,但有一个奇怪的错误。

所以,我做什么,当文档准备好(包含textarea“#doc”):

myDoc = $("#doc").wymeditor()[0];
myDoc_wym = $.getWymeditorByTextarea(myDoc);

setTimeout(function() {
    console.log(myDoc_wym._iframe.contentWindow); // contentWindow returns proper Window object of editor IFrame
    $(myDoc_wym._doc).keydown(function(e) {
        if (e.which == 112) {
            console.log(myDoc_wym); // must return extended jQuery editor object
            myDoc_wym.__proto__._exec("Strong"); // BREAKPOINT
            console.log("It might be done!"); // no luck today
            return false;
        }
    });
}, 1000); // to be sure, that myDoc_wym._doc exists, I just enforced timeout
  • WYMeditor中途准备充分。
  • 使用getWymeditorByTextarea获取其扩展editor对象。
  • 等一下。
  • 编辑器的IFrame的日志Window对象。
  • 当我们按F1键时:

  • 记录myDoc_wym
  • myDoc_wym.__proto__._exec("Strong"); - 用命令"Strong"执行原型函数_exec ...
  • 这里是keydown的崩溃。 我在Chromium中获得的(最新发布的NW.JS)控制台:

    整个日志

    在原型函数hasSelection导致错误。 所以,这就是说_iframe在该代码中是undefined

    WYMeditor.editor.prototype.hasSelection = function () {
        var wym = this;
    
        if (
            // `isSelectionValid` is undocumented in current Rangy (`1.2.2`).
            // It seems to be required because the `rangeCount` in `IE <= 8` seems
            // to be misleading.
            rangy.isSelectionValid(wym._iframe.contentWindow) !== true
        ) {
            return false;
        }
    
        if (wym.selection().rangeCount === 0) {
            return false;
        }
    
        return true;
    };
    

    在尝试通过粘贴控制台输入类似的代码来启用我自己的调用此函数后,但需要调试( console.log(wym); ):

    WYMeditor.editor.prototype.hasSelection = function () {
        var wym = this;
        console.log(wym);
        //console.log(wym._iframe);
        //console.log(wym._iframe.contentWindow);
        if (rangy.isSelectionValid(wym._iframe.contentWindow) !== true) return false;
        if (wym.selection().rangeCount === 0) return false;
        return true;
    };
    

    F1使用自定义功能

  • 第一个对象是我执行WYMeditor命令之前得到的。
  • 其次没有_iframe ,所以它返回undefined。
  • 因此,不能从undefined读取。
  • 看起来像hasSelection被调用两次(例如, selectedContainer ,调用hasSelection ,可能会被_exec调用3次)。 这时我们看到_iframe ,但不再需要它。
  • 事实证明:

  • 在第一次hasSelection叫, wym返回原型对象 ,但...
  • 在第二次wym返回完整的“编辑对象”与所需的属性(如_iframe )。
  • 奇怪的对象

    有些奇怪的东西在那里,我不知道是什么。 按下默认工具栏按钮时,所有工作都完美无缺


    只使用公共API

    这里(有点偏离我的口味)是WYMeditor公共API的文档。

    如果可能,只能通过那里记录的内容与WYMeditor进行交互。

    如果您使用私有方法/属性,我们无法合理支持该使用。

    如果一个属性/方法以下划线开始,它是私人的。

    你在做什么

    请使用公共API重写您的实施。

    你会发现combokeys和exec (而不是_exec )对你想要达到的目标有用。

    链接地址: http://www.djcxy.com/p/89953.html

    上一篇: How to manually execute WYMeditor function w/o errors?

    下一篇: how to include css and javascript in iFrame