我使用InnovaStudio WYSIWYG Editor,我正在尝试用CKFinder替换InnovaStudio的资产管理器。编辑器配置中有一行用于资产管理器使用的URL。我已经把它指向了CKFinder。我无法工作的部分是让字段填充来自CKFinder的双击文件的路径。
似乎使用'func'参数指定回调函数。我正在调用的网址是:/common/ckfinder/ckfinder.html?action=js&func=setAssetValue
InnovaStudio WYSIWYG编辑器提供setAssetValue(v)
回调功能,用于设置字段值。 v
参数应包含网址。
CKFinder在调用时会按预期弹出,但既不双击缩略图也不使用上下文菜单中的“选择”选项。正常/预期的行为是CKFinder关闭,目标字段填充了所选资产的URL。
其他信息:InnovaStudio WYSIWYG编辑器有一个“弹出窗口”,用于向内容添加图像或Flash文件。此弹出窗口位于iframe中。当它调用CKFinder(或它自己的资产管理器)时,它也在iframe中。似乎CKFinder正在查看主窗口的范围,而不是实际包含需要填充的字段的图像/ flash iframe。
答案 0 :(得分:0)
(排序)解决方案
我发现,通过使用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);
}
}
}