kindeditor老版本version 4.1.10 bug踩坑
问题目录
上传图片或者视频的弹窗有时候不出现,只出现遮罩
通过测试发现,出现这种情况不是弹出框没有出现,而是设置固定定位top值为空,元素出现在了屏幕之外(屏幕下边);
查看Elements可以发现:

并没有top值,
正常显示的情况下是这样的:

为什么会出现这种情况呢?
查看源码,弹出框的定位由以下代码决定: 大约在3440行左右
pos : function(x, y, updateProp) {
var self = this;
updateProp = _undef(updateProp, true);
if (x !== null) {
x = x < 0 ? 0 : _addUnit(x);
self.div.css('left', x);
if (updateProp) {
self.x = x;
}
}
if (y !== null) {
y = y < 0 ? 0 : _addUnit(y);
self.div.css('top', y);
if (updateProp) {
self.y = y;
}
}
//console.log(y) 在此处输出Y差看 正常情况和bug情况的区别
return self;
},
autoPos : function(width, height) {
var self = this,
w = _removeUnit(width) || 0,
h = _removeUnit(height) || 0,
scrollPos = _getScrollPos();
if (self._alignEl) {
var knode = K(self._alignEl),
pos = knode.pos(),
diffX = _round(knode[0].clientWidth / 2 - w / 2),
diffY = _round(knode[0].clientHeight / 2 - h / 2);
x = diffX < 0 ? pos.x : pos.x + diffX;
y = diffY < 0 ? pos.y : pos.y + diffY;
} else {
var docEl = _docElement(self.doc);
x = _round(scrollPos.x + (docEl.clientWidth - w) / 2);
y = _round(scrollPos.y + (docEl.clientHeight - h) / 2);
}
if (!(_IE && _V < 7 || _QUIRKS)) {
x -= scrollPos.x;
y -= scrollPos.y;
}
return self.pos(x, y);
},
在pos函数中输出y发现:
- 正常情况下: 输出 '199px' 为字符串类型,带单位;
- bug情况下: 输出 152.32154654 数字没有单位;
这样就发现了问题所在,bug时 152.3333直接复制给元素的top值,为 top: 152.3333 没有单位px,浏览器不读取,导致top为空,元素掉到了屏幕外面。
产生这种情况的原因:
是由于上方代码第22行中的
_addUnit()这个函数:
function _addUnit(val, unit) {
unit = unit || 'px';
return val && /^\d+$/.test(val) ? val + unit : val;
}
问题就出在了/^\d+$/.test(val),如果val为小数的时候,返回了false,则直接return val,不带px单位了
解决办法:
不要直接修改_addUnit函数,这样影响太大,
我们只要保证传给_addUnit的val是一个整数就行,所以修改上面代码块中的第22行
y = y < 0 ? 0 : _addUnit(parseInt(y)); //添加parseInt方法,将y转换成整数
视频上传无法播放的问题
- MP4视频文件不是支持格式
- 原本的视频上传后,在前台页面生成后,会提示播放插件不支持的问题
- 使用ckplayer视频播放插件
步骤一: 修改允许上传的视频格式
修改编辑器目录下的 kendeditor/php/upload_json.php,大概在20行左右,在media类型中添加MP4
$ext_arr = array(
'image' => array('gif', 'jpg', 'jpeg', 'png', 'bmp'),
'flash' => array('swf', 'flv'),
'media' => array('swf', 'flv', 'mp3', 'mp4', 'wav', 'wma', 'wmv', 'mid', 'avi', 'mpg', 'asf', 'rm', 'rmvb'),
'file' => array('doc', 'docx', 'xls', 'xlsx', 'ppt', 'htm', 'html', 'txt', 'zip', 'rar', 'gz', 'bz2'),
);
步骤二:修改kindeditor.js 905行左右,加入需要支持的视频格式,MP4生成的embed的type为application/x-shockwave-flash;
function _mediaType(src) {
if (/\.(rm|rmvb)(\?|$)/i.test(src)) {
return 'audio/x-pn-realaudio-plugin';
}
if (/\.(swf|flv|mp4)(\?|$)/i.test(src)) { //添加MP4
return 'application/x-shockwave-flash';
}
return 'video/x-ms-asf-plugin';
}
步骤三:下载ckplayer,将插件保存到项目的kendeditor/plugins文件夹中,

步骤四:修改kineditor提交视频后生成的embed,按照ckplayer插件简单调用的格式。
- ckplayer播放本地视频的原理是调用ckplayer.swf打开本地的视频,下面的修改kindeditor.js中920行左右embed标签相关的代码,加入ckplayer可以识别的参数flashvars:
function _mediaEmbed(attrs) {
var html = '<embed '; //最后有个空格
//获取当前网址,如: http://localhost:8083/uimcardprj/share/meun.jsp
var curWwwPath=window.document.location.href;
//获取主机地址之后的目录,如: uimcardprj/share/meun.jsp
var pathName=window.document.location.pathname;
var pos=curWwwPath.indexOf(pathName);
//获取主机地址,如: http://localhost:8083
var localhostPath=curWwwPath.substring(0,pos);
_each(attrs, function(key, val) {
if(key == 'src') {
html += key + '="' + K.options.pluginsPath
+ 'ckplayer/ckplayer.swf" ' + 'flashvars="video=' //.swf后又个空格
+ localhostPath + val + '" '; //‘" ’这里最后有个空格
} else {
html += key + '="' + val + '" '; //‘" ’这里最后有个空格
}
});
html += '/></embed>';
return html;
}
- 添加kindeditor生成embed时,要遍历的属性数组,添加上 falshvars,不然我们上面的操作再生成后,就会被忽略;大约在kindeditor.js的298行中:
embed : ['id', 'class', 'src', 'width', 'height', 'type', 'loop', 'autostart', 'quality', '.width', '.height', 'align', 'allowscriptaccess', 'flashvars'], //添加falshvars属性
注意:
- 上方html拼接字符串时,两个属性直接的空格不要漏了,不然在编辑器提交的时候,将img转换为embed的时候,会导致所有的属性都无法被获取!!! 这个坑我也踩了好久
- 网上很多文章写的都是在embed上添加的是 'flashvars="f=', 但是新版的ckplayer则是 'flashvars="video=',用video代替f 不然前台会显示视频路径不存在;
步骤五:前台引入ckplayer,js
在需要播放视频的页面,引入ckplayer.js,生成该播放器;
ckplayer播放器的配置可直接才ckplayer.js中修改,具体文档请参照操作手册
参考链接:
kindeditor老版本version 4.1.10 bug踩坑的更多相关文章
- Delphi中Indy 10的安装和老版本的卸载
http://www.cnblogs.com/railgunman/archive/2010/08/31/1814112.html Indy 10的安装和老版本的卸载 Indy 10下载地址: htt ...
- 使用 Microsoft.UI.Xaml 解决 UWP 控件和对老版本 Windows 10 的兼容性问题
原文 使用 Microsoft.UI.Xaml 解决 UWP 控件和对老版本 Windows 10 的兼容性问题 虽然微软宣称 Windows 10 将是最后一个 Windows 版本,但由于年代跨越 ...
- 新版本读取老版本文件崩溃BUG
读取文件匹配代码 BOOL CWBPage::LoadFromFile(CFile *pFile, LONGLONG& lOff, ULONGLONG lFileLength) { if (p ...
- Spring Cloud版本 version命名说明 (Edgware)
Spring Cloud版本 version命名说明 (Edgware) 版权声明:guofangsky 版权所有,转载不究. https://blog.csdn.net/guofangsky/a ...
- 微软Hololens学院教程-Hologram 230-空间场景建模(Spatial mapping )【微软教程已经更新,本文是老版本】
这是老版本的教程,为了不耽误大家的时间,请直接看原文,本文仅供参考哦!原文链接:https://developer.microsoft.com/EN-US/WINDOWS/HOLOGRAPHIC/ho ...
- 微软Hololens学院教程- Holograms 100: Getting Started with Unity【微软教程已经更新,本文是老版本】
这是老版本的教程,为了不耽误大家的时间,请直接看原文,本文仅供参考哦!原文链接:https://developer.microsoft.com/EN-US/WINDOWS/HOLOGRAPHIC/ho ...
- 微软Hololens学院教程-Hologram 212-Voice(语音)【微软教程已经更新,本文是老版本】
这是老版本的教程,为了不耽误大家的时间,请直接看原文,本文仅供参考哦!原文链接:https://developer.microsoft.com/EN-US/WINDOWS/HOLOGRAPHIC/ho ...
- 微软Hololens学院教程-Hologram 211-Gestures(手势)【微软教程已经更新,本文是老版本】
这是老版本的教程,为了不耽误大家的时间,请直接看原文,本文仅供参考哦!原文链接:https://developer.microsoft.com/EN-US/WINDOWS/HOLOGRAPHIC/ho ...
- 微软Hololens学院教程-Hologram 210 Gaze(凝视)【微软教程已经更新,本文是老版本】
这是老版本的教程,为了不耽误大家的时间,请直接看原文,本文仅供参考哦!原文链接:https://developer.microsoft.com/EN-US/WINDOWS/HOLOGRAPHIC/ho ...
随机推荐
- 运行级别(run level)
inittab是很多linux版本的启动脚本.Linux在完成核内引导以后,就开始运行init程序,它的进程号是1,是所有其他进程的起点.init需要读取/etc/inittab,该文件告诉init在 ...
- Jmeter组件和属性(二)
Jmeter脚本开发原则 简单.正确.高效.简单:去除无关的组件,同时能复用的尽量复用.正确:对脚本或者业务正确性进行必要的判断,不能少也不能多.(200),业务错误的情况下,也可能返回200,必须用 ...
- 双系统卸载linux和装双系统的方法
卸载linux系统: 因为本人装的是windows和Ubuntu,所以引导程序在linux系统里,linux系统可以引导windows系统,而Windows不能引导linux,所以需要修改引导程序,使 ...
- ros nodelet 使用
ros nodelet能够加快高吞吐量程序运行速度比如点云 基本入门程序可以看 http://wiki.ros.org/nodelet/Tutorials/Porting%20nodes%20to%2 ...
- Cookie/Session的认识
Cookie 1.cookie是什么? cookie是一小段文本,伴随着用户请求和页面在web服务器和浏览器之间传递,cookie包含每次用户访问站点时,web应用程序都可以读取的信息 2.为什么需要 ...
- Fresco 获得Bitmap
ImageRequest imageRequest = ImageRequestBuilder .newBuilderWithSource( Uri.parse(getFeedItem(positio ...
- Hadoop(一)Hadoop的简介与源码编译
一 Hadoop简介 1.1Hadoop产生的背景 1. HADOOP最早起源于Nutch.Nutch的设计目标是构建一个大型的全网搜索引擎,包括网页抓取.索引.查询等功能,但随着抓取网页数量的增加, ...
- 验证Xcode真伪的方法,来自苹果官网
验证Xcode真伪的方法,来自苹果官网 Xcode的验证你的版本 2015年9月22日 注意:中文为有道翻译,看下验证方法即可. 我们最近将应用程序从应用程序商店,还建有Xcode的假冒 ...
- MySQL笔记(五)之表的连接
MySql数据库中表的连接一共有如下几种 INNER JOIN 内连接 语法: SELECT column_name(s) FROM table_name1 INNER JOIN table_name ...
- eclipse 怎么 直接查看 文件所在位置 显示在文件管理器中。用浏览器浏览。
韩梦飞沙 韩亚飞 313134555@qq.com yue31313 han_meng_fei_sha eclipse 怎么 直接查看 文件所在位置 显示在文件管理器中.用浏览器浏览.