我目前在 C#(Framework 3.5)的 WinForms 的 WebBrowser 控件中遇到 CKEditor(版本 4.4.0)的问题。我在编辑器中使用了 UIColor 和字体大小/系列选项——当我在 IE 中加载页面时它工作正常。通过 WebBrowser 控件,尝试选择颜色或字体(或右键单击剪切/复制/粘贴菜单)时的单击事件永远不会注册。我注意到,如果我使用键盘选择选项并按回车键,一切都会按预期进行。
在 ckeditor 端似乎发生的事情是它为控件创建一个 div,在该 div 中加载一个 iframe 并生成 HTML,这样你就可以很好地、丰富地显示你要选择的字体,等等。它似乎在加载后,WebBrowser 控件无法识别该 iframe 中新创建的 HTML,并在我单击它时将其视为不存在。即,如果我单击该颜色并且该颜色下有另一个按钮,则其他按钮的单击事件将被注册。有什么方法可以让我通知 Web 浏览器控件实际存在某些东西 - 或者强制它读取新呈现的代码?我注意到,当我单击字体或颜色时,导航事件也会被触发,但之后它永远不会进入 DocumentCompleted/Navigated 例程。
虽然我安装了 IE11,但我的 WinForms 应用程序中的 Web 浏览器控件在 IE 9 设置下运行(使用 FEATURE_BROWSER_EMULATION = 9000)。我也尝试过使用 FEATURE_BROWSER_EMULATION = 11000,但也没有成功。
有人对在这里做什么有任何想法吗?
HTML:
<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<title>Editor Test</title>
<script src="../assets/js/jquery/jquery.js" type="text/javascript"></script>
<script src="../assets/js/ckeditor/ckeditor.js" type="text/javascript"></script>
<script src="../assets/js/ckeditor/adapters/jquery.js" type="text/javascript"></script>
<script language="javascript" type="text/javascript">
$(document).ready(function () {
$("#uxBody").ckeditor();
for (var i in CKEDITOR.instances) {
CKEDITOR.instances[i].on('change', function () { pageIsDirty = true; });
}
});
</script>
</head>
<body>
<form id="form1" runat="server">
<fieldset class="fldSet">
<legend><strong>Correspondence</strong></legend>
<table border="0" cellpadding="2" cellspacing="0" class="icsForm">
<tr id="subjectRow" class="icsFormRow">
<td class="right">Subject:</td>
<td class="left">
<asp:TextBox ID="uxSubject" runat="server" MaxLength="78" style="width: 400px" />
</td>
</tr>
<tr id="bodyRow" class="icsFormAltRow">
<td class="right" style="vertical-align: top;">
<span class="reqFields">*</span>Body:
</td>
<td class="left">
<asp:TextBox ID="uxBody" runat="server" TextMode="MultiLine" Rows="10" style="width: 600px;" />
</td>
</tr>
</table>
</fieldset>
</form>
</body>
</html>
CK 编辑器配置文件:
CKEDITOR.editorConfig = function (config) {
// Define changes to default configuration here.
// For complete reference see:
// http://docs.ckeditor.com/#!/api/CKEDITOR.config
// The toolbar groups arrangement, optimized for two toolbar rows.
config.toolbar = [
{ name: 'clipboard', items: ['Cut', 'Copy', 'Paste', '-', 'Undo', 'Redo'] },
{ name: 'basicstyles', items: ['Bold', 'Italic', 'Underline', 'Strike', '-', 'Subscript', 'Superscript', '-', 'RemoveFormat'] },
{ name: 'links', items: ['Link', 'Unlink'] },
{ name: 'insert', items: ['Image', 'Table', 'HorizontalRule', 'SpecialChar'] },
'/',
{ name: 'paragraph', items: ['NumberedList', 'BulletedList', '-', 'Outdent', 'Indent', '-', 'Blockquote'] },
{ name: 'align', items: ['JustifyLeft', 'JustifyCenter', 'JustifyRight', 'JustifyBlock'] },
{ name: 'fonts', items: ['Font', 'FontSize', '-', 'TextColor', 'BGColor'] },
{ name: 'tools', items: ['Maximize', '-', 'Source'] },
];
// Set the most common block elements.
config.format_tags = 'p;h1;h2;h3;pre';
// Simplify the dialog windows.
config.removeDialogTabs = 'image:advanced;link:advanced';
config.width = '600px';
};
如果你们还想看什么,请告诉我。同样,只有在 WinForms 的 WebBrowser 控件中时,问题才会出现。通过普通浏览器导航到该页面时,一切正常。再次感谢!
最佳答案
首先,确保您正确实现了 WebBrowser
功能控制。我发布了一些您可以复制的工作代码:
然后:
- 使用
<!DOCTYPE html>
和<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
在托管 CKEditor 的网页上。 - 检查
document.compatMode
确保它是CSS1Compat
(而不是BackCompat
)。 - 检查
document.documentMode
以确保它与实际安装的 IE 版本相匹配。
这将确保 CKEditor 可以使用由底层 IE/MSHTML 呈现引擎实现的最新和最强大的 HTML5/JavaScript 功能。
完成上述操作后,看看问题是否消失。这是 CKEditor 托管页面的样子:
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="X-UA-Compatible" content="IE=Edge" />
<title>CKEditor test</title>
<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="/ckeditor/ckeditor.js"></script>
<script type="text/javascript">
$(document).ready(function () {
CKEDITOR.domReady(function () {
CKEDITOR.replace("editorDiv", {
docType: '<!DOCTYPE html>',
on: {
instanceReady: function (evt) {
var editor = evt.editor;
// the editor is ready
editor.execCommand("maximize");
}
}
});
});
});
</script>
</head>
<body>
<div id="editorDiv"></div>
</body>
</html>
关于c# - WinForms 中的 CKEditor 下拉工具栏未注册点击事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24065738/