针对phpnew blog中Discuz UBB编辑器在IE11环境下光标插入位置始终位于头部的问题,分析发现旧版JS文件中的浏览器判断逻辑存在缺陷。本文提供修复后的JavaScript函数,通过正则表达式精确匹配navigator.userAgent,正确识别IE、Firefox、Opera、Chrome及Safari等浏览器及其版本号,从而解决插入点定位不准及Flash加载失败等兼容性问题。
IE11下Discuz UBB编辑器光标定位问题分析
phpnew blog内置了支持Discuz UBB格式的编辑器,该编辑器具备在光标处插入内容等功能,但在IE11浏览器中始终存在定位不准确的问题。经过分析,最终确认原因是旧版JavaScript文件中的浏览器判断逻辑存在异常,导致插入点始终固定在头部。今日对此进行了修复。
下面提供一个用于检测浏览器的JavaScript函数,该函数将返回一个包含浏览器类型和版本信息的数组对象。
浏览器类型及版本号检测JS代码实现
具体实现代码如下:
function sys_userAgent(){
var userAgent = navigator.userAgent,
rMsie = /(msie\s|trident.*rv:)([\w.]+)/,
rFirefox = /(firefox)\/([\w.]+)/,
rOpera = /(opera).+version\/([\w.]+)/,
rChrome = /(chrome)\/([\w.]+)/,
rSafari = /version\/([\w.]+).*(safari)/;
var browser,version,ua;
ua = userAgent.toLowerCase();
var match = rMsie.exec(ua);
if (match != null) {
return { browser : "ie", version : match[2] || "0" };
}
if (!!window.ActiveXObject || "ActiveXObject" in window){
return { browser : "ie", version : "0"};
}
var match = rFirefox.exec(ua);
if (match != null) {
return { browser : "firefox", version : match[2] || "0" };
}
var match = rOpera.exec(ua);
if (match != null) {
return { browser : "opera", version : match[2] || "0" };
}
var match = rChrome.exec(ua);
if (match != null) {
return { browser : "chrome", version : match[2] || "0" };
}
var match = rSafari.exec(ua);
if (match != null) {
return { browser : "safari", version : match[1] || "0" };
}
if (match != null) {
return { browser : "", version : "0" };
}
}
希望这段代码对大家有所帮助。此外,编辑器还修复了附件Flash加载经常失败的问题,并处理了回车键相关的兼容性问题。