IE9 ajax保存权限被拒绝

4

IE9 TinyMCE ajax保存问题

我在一个页面上有几个选项卡,在其中一个选项卡中有三个文本区域(都包含TinyMCE)编辑器。

我使用ajax提交表单并保存值,然后重新显示从PartialViewResult返回的部分视图。

我使用了最新版本(3.5.8)的TinyMCE。

第一次单击时,文本区域的值得到保存。但是当我第二次单击时,选项卡消失,并且提示“SCRIPT70: Permission denied”。

这个错误发生在tiny_mce_src.js中。

    getBody : function() {
        return this.bodyElement || this.getDoc().body;
    }

我尝试使用 document.domain = 'localhost'(写在tiny_mce_src.js的顶部),这可以使得一个textarea转换成TinyMCE编辑器,但是其他两个仍然是普通的textarea。

我还尝试将此设置为1(HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\MAIN\FeatureControl\FEATURE_OBJECT_CACHING\iexplore.exe)。

我的代码用于提交表单和重新显示如下:

    $(".save").live("click", function () {
           tinyMCE.triggerSave();
           var f = $(this).parents("form");
           var action = f.attr("action");
           var serializedForm = f.serialize();
           $.ajax({
               type: 'POST',
               url: action,
               data: serializedForm,
               async: false,
               cache: false,
               success: function (data, textStatus, request) {
                     // redisplay partial view
                     $("div.tab-pane.active").html(data);
                     window.scrollTo(0, 0);
                     InItTinyMCE();
               },
               error: function (req, status, error) {
                     alert("Error occurred!");
               }
           });
           return false;
    });

    function InItTinyMCE() {
           tinyMCE.init({
              mode: "textareas",
              cleanup: true
           });
    }

please help.

3个回答

3

您可能需要正确重新初始化tinymce实例。

要关闭编辑器实例,请使用:

tinymce.execCommand('mceRemoveControl',true,'your_editor_id');

重新初始化,请使用以下方法:
tinymce.execCommand('mceAddControl',true,'your_editor_id');

我应该先在InItTinyMCE方法中初始化,然后在成功回调中删除并重新初始化吗? - Sanjay Panchal
不是的,但你的问题中并不清楚编辑器实例是否被重新初始化或者是否位于选项卡上。tinymce 不喜欢在 DOM 中移动,并且第二次初始化编辑器会导致你所描述的行为。 - Thariama
是的,你说得对。我在初始化TinyMCE两次(第一次是在选项卡加载时,第二次是在成功回调上)。我将TinyMCE的初始化减少到了一次。现在可以随时关闭编辑器并重新初始化。非常感谢您的回复。 - Sanjay Panchal

0
add some line in Sizzle function in sizzle.js like this -

function Sizzle( selector, context, results, seed ) {
var match, elem, m, nodeType,
// QSA vars
i, groups, old, nid, newContext, newSelector;

try{
document === document; //may cause permission denied
}
catch(err){
document = window.document; //resets document, and no more permission denied errors.
}
if ( ( context ? context.ownerDocument || context : preferredDoc ) !== document ) {
setDocument( context );
}
//remaining code will be same 

}

0

尝试使用 mode:exact 模式

$(window).ready(function() {
tinyMCE.init({
    ...
    mode : "exact",
    elements : "elm1,elm2"
});

})

.................


我已经尝试过那种方法,它也起作用了。但是当我指定document.domain时,只有一个文本区域被转换为tinyMCE编辑器,而另外两个则呈现为普通的文本区域。 - Sanjay Panchal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接