Firefox CKEditor:在FF中切换模式(源/所见即所得)后无法取消锚定默认行为(href页面更改)
我们在ASP.Net MVC 3页面上安装了一个CKEditor:Firefox CKEditor:在FF中切换模式(源/所见即所得)后无法取消锚定默认行为(href页面更改),firefox,iframe,ckeditor,anchor,behavior,Firefox,Iframe,Ckeditor,Anchor,Behavior,我们在ASP.Net MVC 3页面上安装了一个CKEditor: var editor = CKEDITOR.replace(...); 在这个编辑器中,我们使用一些插件来创建几种类型的元素,导致问题的元素是使用以下结构创建的: <div backendname="asfasdf" class="editableArea" contenteditable="false" displayname="asdfasdf" fieldheight="50" fieldlength="
var editor = CKEDITOR.replace(...);
在这个编辑器中,我们使用一些插件来创建几种类型的元素,导致问题的元素是使用以下结构创建的:
<div backendname="asfasdf" class="editableArea" contenteditable="false" displayname="asdfasdf"
fieldheight="50" fieldlength="610" fieldtype="5" maxchars="0" required="true">
<a href="google.com">
<img align="top" alt="" hspace="0" src="http://someaddress/img.jpg"
style="border-width: 0pt; border-style: solid; margin: 0pt;
width: 420px; height: 315px;" vspace="0" />
</a>
</div>
正如您所看到的,我们已经尝试了一些事件取消的变体,以防止锚行为。当第一次创建元素时,它会按预期工作。当我们在CKEditor中切换模式时,问题就出现了
对于不熟悉CKEditor的用户,当您在“源”和“所见即所得/设计”之间切换模式时,设计模式使用的iframe将被销毁并替换为textarea。当切换回设计时,将重新创建iframe并填充所有内容
我们尝试在CKEditor上使用此事件重新附加click事件,如下所示:
editor.on('mode', function (e) {
if (e.data.previousMode == 'source') {
$jq("iframe").contents().find('.editableArea a').click(AnchorClick);
}
});
function AnchorClick(event) {
event.preventDefualt();
event.originalEvent.preventDefault();
event.preventPropagation();
event.returnValue = false;
return false;
} (this function was separated for debugging purposes)
同样,我们尝试了我们能想到的任何方法,但是FF仍然遵循iframe内部的链接,这导致了CKEditor及其内容的丢失
我们无法在锚定标记中定义href=“…
”,因为CKEditor中的信息是为将来使用而存储的,因此我们必须在链接中存储真实的href
我知道这是一个非常奇怪的问题。事实上,我想不出还有什么可以做的,也找不到关于如何克服这种特殊情况下的FF行为的信息。希望SO的许多用户中至少有一个遇到过类似的问题,可以为我们指出正确的方向。这是一个打字错误。这个问题解决了
function AnchorClick(event){
event.preventDefualt();
...
}
function AnchorClick(event){
event.preventDefualt();
...
}