Discuz 7.2坑爹集锦-js篇
在调试DZ过程中firebug经常提示common.js出错,什么“Error: s is null”,“$ is not defined”,“BROWSER not defined”。其实多半和XML有关:当ajax操作时后台PHP出现错误(包括notice)导致前台JS在解析期望中XML格式返回值时出错。也许是DZ的ajax调用对返回值处理不够完善。解决办法是编辑php.ini设置display_error = off。
DZ的js文件没细看,主要是解决几个调试过程中遇到兼容性问题。
-------------------------------------------------------------------------------------------------------
类型: 过时函数
坑爹指数: ★
代码: include/js/common.js 10-14
BROWSER.ie = window.ActiveXObject && USERAGENT.indexOf('msie') != -1 && USERAGENT.substr(USERAGENT.indexOf('msie') + 5, 3);
BROWSER.firefox = document.getBoxObjectFor && USERAGENT.indexOf('firefox') != -1 && USERAGENT.substr(USERAGENT.indexOf('firefox') + 8, 3);
BROWSER.chrome = window.MessageEvent && !document.getBoxObjectFor && USERAGENT.indexOf('chrome') != -1 && USERAGENT.substr(USERAGENT.indexOf('chrome') + 7, 10);
BROWSER.opera = window.opera && opera.version();
BROWSER.safari = window.openDatabase && USERAGENT.indexOf('safari') != -1 && USERAGENT.substr(USERAGENT.indexOf('safari') + 7, 8);
点评: 测试过程中某天发现FF下登录窗口账户名只能选择用户名,而在chrome下面可选UID及email。当时一直没找到原因,某天测试时修改到此处,顺便用slice()替换substr()发现FF的登录窗问题正常了。猛然想起以前看过对于substr的一个注解:“ECMAscript 没有对该方法进行标准化,因此反对使用它”。在Firefox8以前都没这个问题,看来FF开始放弃对此函数的兼容了。另外Firefox9也不支持document.getBoxObjectFor对象了。
FIX:
BROWSER.ie = window.ActiveXObject && USERAGENT.indexOf('msie') != -1 && USERAGENT.slice(USERAGENT.indexOf('msie') + 5, USERAGENT.indexOf('msie') + 8) || false;
BROWSER.firefox = USERAGENT.indexOf('firefox') != -1 && USERAGENT.slice(USERAGENT.indexOf('firefox') + 8, USERAGENT.indexOf('firefox') + 11) || false;
BROWSER.chrome = window.MessageEvent && !document.getBoxObjectFor && USERAGENT.indexOf('chrome') != -1 && USERAGENT.slice(USERAGENT.indexOf('chrome') + 7, USERAGENT.indexOf('chrome') + 17) || false;
BROWSER.opera = window.opera && opera.version() || false;
BROWSER.safari = window.openDatabase && USERAGENT.indexOf('safari') != -1 && USERAGENT.slice(USERAGENT.indexOf('safari') + 7, USERAGENT.indexOf('safari') + 15) || false;
-------------------------------------------------------------------------------------------------------
类型: 操作符顺序
坑爹指数: ★
代码: include/js/common.js=1112
function ajaxget(url, showid, waitid, loading, display, recall) {
waitid = typeof waitid == 'undefined' || waitid === null ? showid : waitid;
...
}
点评: 怎么看这个赋值表达式也没问题,可是当minify之后就时不时会在这儿出错,提示“Uncaught ReferenceError: $ is not defined”,用小括号包裹之后就正常了。也蛮奇怪的……
FIX: waitid = (typeof waitid == 'undefined' || waitid === null) ? showid : waitid;
-------------------------------------------------------------------------------------------------------
类型: 代码规范
坑爹指数: ☆
代码: include/js/common.js=834
if($('fwin_dialog_submit')) $('fwin_dialog_submit').onclick = function() {
if(typeof func == 'function') func();
else eval(func);
hideMenu(menuid, 'dialog')
};
点评: 缺少分号结尾,跑到if判断后去了。不过js还是很宽容的,这两个小毛病不会导致啥问题。
ADD:有朋友说修正分号
后
反而会导致发帖编辑器上按钮(图片、附件等)全部失效了。此处请谨慎修改
-------------------------------------------------------------------------------------------------------
类型: 代码规范
坑爹指数: ☆
代码:
include/js/common.js=1140
if(x.autogoto) scroll(0, x.showId.offsetTop);
include/js/common.js=1150
if(!evaled) evalscript(s);
include/js/common.js=1199
if(!evaled) evalscript(s);
include/js/common.js=1234
if(isUndefined(timeout)) timeout = 3000;
if(isUndefined(cache)) cache = 1;
if(isUndefined(pos)) pos = '43';
if(isUndefined(duration)) duration = timeout > 0 ? 0 : 3;
include/js/common.js=1551
if(tagname == 'INPUT' || tagname == 'TEXTAREA') return;
include/js/common.js=1651
if(lasttop == -1) lasttop = 0;
include/js/common.js=1841
if(isUndefined(parsecode)) parsecode = true;
if(parsecode) str= str.replace(/\s*\[code\]([\s\S]+?)\[\/code\]\s*/ig, function($1, $2) {return codetag($2);});
include/js/common.js=1860
if(typeof wysiwyg != 'undefined' && wysiwyg) text = text.replace(/<br[^\>]*>/ig, '\n').replace(/<(\/|)[A-Za-z].*?>/ig, '');
include/js/common.js=835
if($('fwin_dialog_submit')) $('fwin_dialog_submit').onclick = function() {
if(typeof func == 'function') func(); // <----
else eval(func); // <----
hideMenu(menuid, 'dialog');
}
点评: 看来common.js是同一位大猿写的,代码不喜欢用大括号包裹条件句。虽然没有错误,minify之后也正常,但在后期维护时很容易导致问题。习惯成自然,养成的习惯都不好改,不一定害己但一定害人~
版权曾经拥有,欢迎网上分享
分享到:
相关推荐
源码学习,压缩包解压密码:www.cqlsoft.com
礼品兑换插件 Discuz7.2 utf-8版安装 出错,本人已经做修改,可以顺利安装。
discuz 7.2-UTF8(人人连接组件) discuz 7.2-UTF8(人人连接组件) discuz 7.2-UTF8(人人连接组件)
discuz 7.2-GBK(人人连接组件) discuz 7.2-GBK(人人连接组件) discuz 7.2-GBK(人人连接组件) discuz 7.2-GBK(人人连接组件)
DISCUZ7.2ENGLISHBYCOOBY.rar DISCUZ7.2英文版,适合国外的
红色风格模板最新discuz模板discuz7.2用的
Discuz7.2 Water3风格 1. 1、将附件下载后解压缩到当前文件夹,得到一个“water7.2”文件夹; 2. 2、将这个文件夹拷贝到你的论坛的“templates”目录下; 3. 3、登录到论坛后台,到“界面”→“风格管理”,在...
复现discuz7.2注入漏洞
Discuz_7.2 Ucenter整合
dz 7.2的数据字典。有了它还怕不懂dz吗?
discuz7.2首页多格插件discuz7.2首页多格插件discuz7.2首页多格插件discuz7.2首页多格插件discuz7.2首页多格插件discuz7.2首页多格插件discuz7.2首页多格插件
Discuz_7.2_FULL_SC_UTF8.zip Discuz_7.2_FULL_SC_UTF8.zip Discuz_7.2_FULL_SC_UTF8.zip Discuz_7.2_FULL_SC_UTF8.zip
discuz!7.2数据库结构表 discuz 源码 utf8格式 环境搭建使用。
Discuz! 7.2版本充分听取了来自社区运营一线的想法和需求,增加和改进30余处与社区门户运营密切相关的功能与细节。为了把握当前主流社区产品的应用趋势,满足 地方及垂直社区门户化、规模化发展的应用需求,康盛创想...
discuz7.2 模板,;里面是一个discuz制作的模板,分享下
Discuz!7.2用户手册..................
最经典Discuz!7.2源码分析 最早由郭鑫在discuz.net上发贴 后无经无数人转载. 本人整理为txt.
Discuz7.2在线阅读插件。主要针对swf格式所写。下载后直接覆盖到论坛根目录即可。
Discuz7.2 转换为 HYBBS
Discuz-7.2.zip