如何手动执行WYMeditor function w/o错误?
How to manually execute WYMeditor function w/o errors?
对于调试,请观看 jquery.wymeditor.js
。
我需要通过 JavaScript 从我的自定义工具栏(准确地说是功能区)执行 "Strong"、"Indent" 等命令并且没有错误。 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在半路上准备充分
- 使用
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
,因此返回未定义。
- 因此,无法读取未定义的内容。
- 似乎
hasSelection
被调用了两次(例如,selectedContainer
调用了hasSelection
,可能被_exec
调用了3次)。此时我们看到 _iframe
,但不再需要它。
事实证明:
- 在 第一次
hasSelection
调用,wym
作为原型对象返回 ,但是...
- 在 第二次
wym
返回完整 "editor object" 并具有所需的属性(例如 _iframe
)。
上面有奇怪的东西,我不知道是什么。按默认工具栏按钮时一切正常。
仅使用 public API
的文档(对我来说有点太隐蔽了)
如果可能,仅通过此处记录的内容与 WYMeditor 交互。
如果您使用私有 methods/properties,我们无法合理地支持该用途。
如果 property/method 以下划线开头,则它是私有的。
你想做什么
请使用 public API.
重写您的实现
对于调试,请观看 jquery.wymeditor.js
。
我需要通过 JavaScript 从我的自定义工具栏(准确地说是功能区)执行 "Strong"、"Indent" 等命令并且没有错误。 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在半路上准备充分
- 使用
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
,因此返回未定义。 - 因此,无法读取未定义的内容。
- 似乎
hasSelection
被调用了两次(例如,selectedContainer
调用了hasSelection
,可能被_exec
调用了3次)。此时我们看到_iframe
,但不再需要它。
事实证明:
- 在 第一次
hasSelection
调用,wym
作为原型对象返回 ,但是... - 在 第二次
wym
返回完整 "editor object" 并具有所需的属性(例如_iframe
)。
上面有奇怪的东西,我不知道是什么。按默认工具栏按钮时一切正常。
仅使用 public API
的文档(对我来说有点太隐蔽了)如果可能,仅通过此处记录的内容与 WYMeditor 交互。
如果您使用私有 methods/properties,我们无法合理地支持该用途。
如果 property/method 以下划线开头,则它是私有的。
你想做什么
请使用 public API.
重写您的实现