如何控制CKEditor API为filebrowserBrowseUrl打开新窗口的位置?

时间:2016-02-18 21:53:50

标签: javascript asp.net-mvc ckeditor ckeditor.net

MVC5,CKEditor自定义文件管理器API

我的界面运行良好,但是当我点击图像按钮选择要插入的图像时,文件选择的新窗口显示在我系统的主监视器上(运行4个监视器)。因此,如果我使用显示器3进行在线编辑,则必须转到主显示器才能选择图像,这有点让人分心。最好在我当前窗口的顶部打开新窗口。

我不知道如何解决这个问题。我无法轻易找到CKEditor配置设置,我也不了解如何强制打开视图或在特定位置打开视图。

这是我调用CKEditor的设置脚本:

@Section Scripts
<script src="~/scripts/ckeditor/ckeditor.js"></script>
<script>
    CKEDITOR.replace('Model.UserPost.Body', {
        filebrowserBrowseUrl: '/BlogsAndForums/UserPost/ImageDisplay?AnchorPostID=' + @Model.AnchorPostID, //This line routes to the ImageDisplay method and view.  Needs more configuration
        toolbarGroups: [  // Define the toolbar groups as it is a more accessible solution.
            { "name": "basicstyles", "groups": ["basicstyles"] },
            { "name": "links", "groups": ["links"] },
            { "name": "paragraph", "groups": ["list", "blocks"] },
            { "name": "document", "groups": ["mode"] },
            { "name": "insert", "groups": ["insert"] },
            { "name": "styles", "groups": ["styles"] },
            { "name": "about", "groups": ["about"] }
        ],
        removeButtons: 'Underline,Strike,Subscript,Superscript,Anchor,Styles,Specialchar' // Remove the redundant buttons from toolbar groups defined above.
    });
</script>
@Scripts.Render("~/bundles/jqueryval")
End Section

ImageDisplay方法(见filebrowserBrowseUrl:spec)(1)显示可供选择的图像列表。 (2)点击图像后,(3)关闭并返回CKEditor。 (4)填充图像的URL,之后一切都很好。

我遇到的唯一问题是ImageDisplay View显示在我的显示器上。

1 个答案:

答案 0 :(得分:2)

这个related question解释了如何在右侧桌面(监视器)中打开弹出窗口。这一切都与设置正确的window.open()选项有关。

现在困难的部分。从理论上讲,应该可以使用editor.config.fileBrowserWindowFeatures。实际情况是,Popup plugin打开弹出窗口(window.open()的包装器)实现得非常严重,只有overrides any geometry you set in the config

It doesn't even return a new window handler for the popup

所以基本上除了(这是一个非常非常讨厌的黑客)之外你什么也做不了:

var org = window.open;
window.open = function() { 
  var args = Array.prototype.slice.call(arguments, arguments); 
  console.log( args ); 
  args[ 2 ] = args[ 2 ].replace( /height=\d+/g, 'height=100' ); 
  return org.apply( window, args); 
}

我在CKEditor错误跟踪器上创建了an issue。希望它能够平滑插件。