我使用InnovaStudio WYSIWYG Editor,并且试图用CKFinder替换InnovaStudio的资产管理器。编辑器配置中有一行用于资产管理器的URL。我已将其指向CKFinder。我无法工作的部分是使用来自CKFinder的双击文件的路径填充字段。

似乎使用'func'参数指定了回调函数。我正在呼叫的URL是:/common/ckfinder/ckfinder.html?action=js&func=setAssetValue

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

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



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

最佳答案

(排序)解决方案

通过使用Firebug挖掘DOM,我发现InnovaStudio创建了一个ISWindow对象,在该对象中放置了对它产生的窗口的引用。我修改了回调函数以遍历该对象,并为适当的iframe调用setAssetValue()函数。这行得通,但是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);
      }
   }
}

关于javascript - 将CKFinder与InnovaStudio所见即所得编辑器集成,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/2579062/

10-13 06:38