对于调试,请观看jquery.wymeditor.js
.
我需要通过 JavaScript 从我的自定义工具栏(准确地说是功能区)执行“强”、“缩进”等命令,并且没有错误。80% 完成了,我可以执行命令,但是有一个奇怪的错误。
所以,当文档准备好(包含文本区域“#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 半路要做好充分准备。
- 使用 .获取其扩展
editor
对象getWymeditorByTextarea
。 - 等一下。
- 编辑器 IFrame 的日志
Window
对象。 当我们按下
F1
:- 日志
myDoc_wym
。 myDoc_wym.__proto__._exec("Strong");
_exec
-使用命令执行原型函数"Strong"
...
- 日志
这里发生了崩溃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;
};
- 第一个对象是我在执行 WYMeditor 命令之前得到的。
- 第二个没有
_iframe
,所以它返回未定义。 - 因此,无法从未定义中读取。
- 似乎
hasSelection
被调用了两次(例如,selectedContainer
调用hasSelection
,可能被调用 3 次_exec
)。此时我们看到_iframe
,但不再需要它。
事实证明:
- 第一次
hasSelection
调用,wym
作为原型对象返回,但是...... - 第二次 作为
wym
具有所需属性(例如_iframe
)的完整“编辑器对象”返回。
那里有奇怪的东西,我不知道是什么。当按下默认工具栏按钮时,一切正常。