文档章节

Discuz 7.2坑爹集锦-js篇

mark35
 mark35
发布于 2012/01/12 16:39
字数 863
阅读 1381
收藏 5
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之后也正常,但在后期维护时很容易导致问题。习惯成自然,养成的习惯都不好改,不一定害己但一定害人~


版权曾经拥有,欢迎网上分享
转载请保留链接 http://my.oschina.net/u/126398/blog/39009

 

 

© 著作权归作者所有

mark35
粉丝 142
博文 21
码字总数 17615
作品 0
成都
程序员
私信 提问
加载中

评论(2)

mark35
mark35 博主

引用来自“宇默”的评论

提示“Uncaught ReferenceError: $ is not defined”,这个错误我遇到过,那是我在改程序时,增加jquery时,发现$这个同样的错误,只不过是,遇到同名的函数名称,后来我用了jQueryjQuery.noConflict() ,解决了多库共存问题

是的。如果使用了其他js框架一定确保$不冲突
Hycomer
Hycomer
提示“Uncaught ReferenceError: $ is not defined”,这个错误我遇到过,那是我在改程序时,增加jquery时,发现$这个同样的错误,只不过是,遇到同名的函数名称,后来我用了jQueryjQuery.noConflict() ,解决了多库共存问题
Discuz 7.2坑爹集锦

Discuz是强大的论坛系统(以下简称DZ)使用广泛。目前Dz最新版本是 X2(20111221),虽然DZ 7.2版本比较老,中间尚有DZ X1,X1.5,但是使用7.2版本的网站还不少。并且7.2是论坛程序,而X系列添加...

mark35
2012/01/11
6.6K
11
Discuz 7.2坑爹集锦-PHP篇 update 20120525

Discuz 7.2坑爹集锦-PHP篇 ucc代表uc_client目录 ucs代表uc_server目录 类型: 代码风格 坑爹指数: ☆ 点评: DZ代码不错,不过其代码风格对于维护来说比较痛苦。 本来应该尽量避免在判断中...

mark35
2012/01/11
2.9K
23
四月前端知识集锦(每月不可错过的文章集锦)

目前自己组建的一个团队正在写一份面试图谱,将会在七月中旬开源。内容十分丰富,第一版会开源前端方面知识和程序员必备知识,后期会逐步写入后端方面知识。因为工程所涉及内容太多(目前已经...

夕阳
2018/05/02
0
0
javascript集锦(一)

javascript集锦(一): javascript作用域: function myFun(){test = 123;}myFun(); //执行myFun后, test在myFun中没有声明var, 被视作全局变量alert(test); //123 javascript闭包:闭包可以记...

ihaolin
2014/03/30
72
0
Discuz!7.0.0 如何正确设置过滤词语(防灌水)

http://www.discuz.net/forum.php?mod=viewthread&tid=2799229 http://www.discuz.net/forum.php?mod=viewthread&tid=3148100 http://search.discuz.net/f/discuz?mod=forum&formhash=ad29b0......

mickelfeng
2013/07/18
850
1

没有更多内容

加载失败,请刷新页面

加载更多

vue vue-router beforeRouteEnter

本文转载于:专业的前端网站➬vue vue-router beforeRouteEnter beforeRouteEnter (to, from, next) { // 在渲染该组件的对应路由被 confirm 前调用 // 不!能!获取组件实例 `thi...

前端老手
49分钟前
4
0
Spring Boot 2 实战:结合 Docker 容器化

1. 前言 Docker 是啥?好处是啥? 什么现在如果作为一名开发你还不知道甚至没有用过我都感觉你落伍了。Docker 是一种虚拟化的容器技术,目的为了打造持续集成、版本控制、可移植性、隔离性和...

码农小胖哥
54分钟前
4
0
Linux 常用查询句柄的命令(Too many open files)

摘要 查询命令 进程占用的句柄总数 lsof -n | wc -l 查看哪一个进程占用的句柄最多 lsof -n|awk '{print $2}'|sort|uniq -c|sort -nr|more 第一列 是 占用句柄数; 第二列 是 进程号 PID;...

liangxiao
54分钟前
5
0
JavaScript权威指南笔记5

第五章、语句 0、概述 JS程序是一系列可执行语句的集合。 通过控制语句来改变语句的默认执行顺序。 控制语句:条件、循环和跳转(如return、break和throw) 2、复合语句 当多条语句被当做一条语...

_Somuns
今天
5
0
vmware安装ubuntu18.04总是 panic -not syncing:corrupted stack end detected inside schedule

Vmware 安装ubuntu 总是卡着不动, 提示panic -not synciong 网上提示很多办法,都试了效果不佳, 找到了完美解决办法 你的兼容模式重新选一下为6.0,兼容性对硬件有要求的 即可实现 成功安装...

dragon_tech
今天
5
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部