1

我使用InnovaStudio WYSIWYG Editor,我正在尝试用 CKFinder 替换 InnovaStudio 的 Asset Manager。编辑器配置中有一行用于资产管理器使用的 URL。我把它指向了CKFinder。我无法开始工作的部分是让该字段填充来自 CKFinder 的双击文件的路径。

它似乎使用'func'参数来指定回调函数。我打电话的网址是:/common/ckfinder/ckfinder.html?action=js&func=setAssetValue

InnovaStudio 所见即所得编辑器提供setAssetValue(v)用于设置字段值的回调函数。该v参数应包含 URL。

CKFinder 在调用时会按预期弹出,但双击缩略图或使用上下文菜单中的“选择”选项都不起作用。正常/预期的行为是 CKFinder 关闭并且目标字段填充了所选资产的 URL。


附加信息: InnovaStudio WYSIWYG 编辑器有一个“弹出窗口”,用于将图像或 Flash 文件添加到内容中。此弹出窗口位于 iframe 中。当它调用 CKFinder(或它自己的资产管理器)时,它也在 iframe 中。看来 CKFinder 正在查看主窗口的范围,而不是实际包含需要填充的字段的图像/闪存 iframe。

4

1 回答 1

0

(某种)解决方案

通过使用 Firebug 挖掘 DOM,我发现 InnovaStudio 创建了一个ISWindow对象,它在其中放置了对其生成的窗口的引用。我修改了回调函数以遍历该对象并setAssetValue()为适当的 iframe 调用该函数。这有效,但 CKEditor 仍然没有自行关闭。我认为那是因为它不“知道”如何关闭它所在的 iframe。有没有办法告诉 CKFinder 如何关闭它所在的窗口?我可以设想使用 iframe 的其他情况。

我更希望 CKFinder 使用 iframe 显示,但我最终使用标准的 CKFinder 弹出窗口让一切正常工作。

编辑器配置行: oEdit1.cmdAssetManager = "parent.BrowseServerIS();";

支持功能:

// InnovaStudio WYSIWYG Editor version
function BrowseServerIS()
{
   // You can use the "CKFinder" class to render CKFinder in a page:
   var finder = new CKFinder();
   // The path for the installation of CKFinder (default = "/ckfinder/").
   finder.BasePath = '/common/ckfinder/';
   // Name of a function which is called when a file is selected in CKFinder.
   finder.SelectFunction = SetFileFieldIS;
   // Launch CKFinder
   finder.Popup();
}

// InnovaStudio WYSIWYG Editor version
function SetFileFieldIS(fileUrl, data)
{
   for (var i in ISWindow.objs) {
      if ((null != ISWindow.objs[i].rt.frm.contentWindow)
            && ('function' == typeof ISWindow.objs[i].rt.frm.contentWindow.setAssetValue)) {
         ISWindow.objs[i].rt.frm.contentWindow.setAssetValue(fileUrl);
      }
   }
}
于 2010-04-05T22:36:04.163 回答