问题目录

上传图片或者视频的弹窗有时候不出现,只出现遮罩

通过测试发现,出现这种情况不是弹出框没有出现,而是设置固定定位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转换成整数

视频上传无法播放的问题

  1. MP4视频文件不是支持格式
  2. 原本的视频上传后,在前台页面生成后,会提示播放插件不支持的问题
  3. 使用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插件简单调用的格式。

  1. 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;
}
  1. 添加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中修改,具体文档请参照操作手册

参考链接:

have a talk

kindeditor老版本version 4.1.10 bug踩坑的更多相关文章

  1. Delphi中Indy 10的安装和老版本的卸载

    http://www.cnblogs.com/railgunman/archive/2010/08/31/1814112.html Indy 10的安装和老版本的卸载 Indy 10下载地址: htt ...

  2. 使用 Microsoft.UI.Xaml 解决 UWP 控件和对老版本 Windows 10 的兼容性问题

    原文 使用 Microsoft.UI.Xaml 解决 UWP 控件和对老版本 Windows 10 的兼容性问题 虽然微软宣称 Windows 10 将是最后一个 Windows 版本,但由于年代跨越 ...

  3. 新版本读取老版本文件崩溃BUG

    读取文件匹配代码 BOOL CWBPage::LoadFromFile(CFile *pFile, LONGLONG& lOff, ULONGLONG lFileLength) { if (p ...

  4. Spring Cloud版本 version命名说明 (Edgware)

    Spring Cloud版本 version命名说明 (Edgware)   版权声明:guofangsky 版权所有,转载不究. https://blog.csdn.net/guofangsky/a ...

  5. 微软Hololens学院教程-Hologram 230-空间场景建模(Spatial mapping )【微软教程已经更新,本文是老版本】

    这是老版本的教程,为了不耽误大家的时间,请直接看原文,本文仅供参考哦!原文链接:https://developer.microsoft.com/EN-US/WINDOWS/HOLOGRAPHIC/ho ...

  6. 微软Hololens学院教程- Holograms 100: Getting Started with Unity【微软教程已经更新,本文是老版本】

    这是老版本的教程,为了不耽误大家的时间,请直接看原文,本文仅供参考哦!原文链接:https://developer.microsoft.com/EN-US/WINDOWS/HOLOGRAPHIC/ho ...

  7. 微软Hololens学院教程-Hologram 212-Voice(语音)【微软教程已经更新,本文是老版本】

    这是老版本的教程,为了不耽误大家的时间,请直接看原文,本文仅供参考哦!原文链接:https://developer.microsoft.com/EN-US/WINDOWS/HOLOGRAPHIC/ho ...

  8. 微软Hololens学院教程-Hologram 211-Gestures(手势)【微软教程已经更新,本文是老版本】

    这是老版本的教程,为了不耽误大家的时间,请直接看原文,本文仅供参考哦!原文链接:https://developer.microsoft.com/EN-US/WINDOWS/HOLOGRAPHIC/ho ...

  9. 微软Hololens学院教程-Hologram 210 Gaze(凝视)【微软教程已经更新,本文是老版本】

    这是老版本的教程,为了不耽误大家的时间,请直接看原文,本文仅供参考哦!原文链接:https://developer.microsoft.com/EN-US/WINDOWS/HOLOGRAPHIC/ho ...

随机推荐

  1. Ubuntu 下查看已安装的软件

    Ubuntu 下如何查看已安装的软件 1.查看安装的所有软件 dpkg -l 例如: dpkg -l | grep ftp 2.查看软件安装的路径 dpkg -L | grep ftp 也可以用 wh ...

  2. 表格中上移下移置顶的js操作

    <script> $(function(){  //上移  var $up = $(".up")  $up.click(function() {   var $tr = ...

  3. 根据名字杀死进程Killall

    Killall命令可以用来给一个特定的进程发送一个信号.这个信号默认情况下是SIGTERM,但也可以由killall命令使用参数来指定其它信号.现在让我们通过一些实际的例子来看看这个命令的实际用法. ...

  4. HTML+CSS图文排版

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xht ...

  5. POJ 2186 Popular cows(Kosaraju+强联通分量模板)

    题目链接:http://poj.org/problem?id=2186 题目大意:给定N头牛和M个有序对(A,B),(A,B)表示A牛认为B牛是红人,该关系具有传递性,如果牛A认为牛B是红人,牛B认为 ...

  6. 使用Guava retryer优雅的实现接口重试机制

    转载自: 使用Guava retrying优雅的实现接口重调机制 Guava retrying:基于 guava 的重试组件 实际项目中,为了考虑网络抖动,加锁并发冲突等场景,我们经常需要对异常操作进 ...

  7. linux中的vim 编辑一行内容,如何使光标快速移动到行首和行尾以及行中间某处啊?

    光标定位G 移至行行首nG 移至第n行行首n+ 移n行行首n- 移n行行首n$ 移n行(1表示本行)行尾0 所行行首$ 所行行尾^ 所行首字母h,j,k,l 左移移移右移H 前屏幕首行行首M 屏幕显示 ...

  8. 应用nslookup命令查看A记录、MX记录、CNAME记录和NS记录

    https://blog.csdn.net/qq_38058202/article/details/80468688

  9. centos7 修改时区

    Linux 系统(我特指发行版, 没说内核) 下大部分软件的风格就是不会仔细去考虑向后 的兼容性, 比如你上个版本能用这种程序配置, 没准到了下一个版本, 该程序已经不见了. 比如 sysvinit ...

  10. 【Mysql To EF】codefirst连接问题提供程序未返回 ProviderManifestToken 字符串

    连接字符串写错导致,修改后OK. 原来的: <connectionStrings> <add name="EFDbContext" connectionStrin ...