`
waiting
  • 浏览: 234762 次
  • 性别: Icon_minigender_1
  • 来自: cq
社区版块
存档分类
最新评论

Discuz 7.2坑爹集锦-js篇

阅读更多

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之后也正常,但在后期维护时很容易导致问题。习惯成自然,养成的习惯都不好改,不一定害己但一定害人~



版权曾经拥有,欢迎网上分享

0
1
分享到:
评论
2 楼 waiting 2012-02-10  
liu1084 写道
点评:        看来common.js是同一位大猿写的,代码不喜欢用大括号包裹条件句。虽然没有错误,minify之后也正常,但在后期维护时很容易导致问题。习惯成自然,养成的习惯都不好改,不一定害己但一定害人~

未必啊,也可能是刚刚毕业的人写的东西


新人往往按照规范来写,以前那时候规范不严格也不做minify啥的不会出问题所以容易养成在现在看来不规范的代码风格
1 楼 liu1084 2012-02-07  
点评:        看来common.js是同一位大猿写的,代码不喜欢用大括号包裹条件句。虽然没有错误,minify之后也正常,但在后期维护时很容易导致问题。习惯成自然,养成的习惯都不好改,不一定害己但一定害人~

未必啊,也可能是刚刚毕业的人写的东西

相关推荐

    QQ互联插件版 for Discuz! 7.2 v1.0-源码.zip

    7.2 v1.0"的源码可以让我们深入了解如何将QQ开放API与Discuz! 系统进行对接,以及如何处理用户授权、登录状态同步等问题。源码中可能包含了以下几个关键部分: 1. **接口调用**:源码会包含与QQ服务器交互的接口...

    礼品兑换插件for Discuz7.2 utf-8版-修改安装出错

    标题中的“礼品兑换插件for Discuz7.2 utf-8版-修改安装出错”表明这是一个针对Discuz 7.2版本论坛系统的礼品兑换功能的插件,且该插件在原始状态下可能存在安装问题。Discuz是一款广泛使用的开源社区论坛软件,utf-...

    discuz 7.2-UTF8(人人连接组件)

    7.2 版本是 Discuz! 发展历程中的一个重要里程碑,提供了更加完善的社区管理工具和用户体验。而 UTF8 编码的引入,则使得 Discuz! 能够支持更多语言,特别是中文环境,确保了多语言内容的正常显示。 人人连接组件则...

    discuz 7.2-GBK(人人连接组件)

    7.2-GBK是一款基于GBK编码的社区论坛系统,它由Discuz!官方推出,旨在为用户提供一个高效、稳定的在线交流平台。其中,人人连接组件是Discuz! 7.2的一个特色功能,它实现了Discuz! 论坛与人人网(原校内网)的无缝...

    DISCUZ7.2英文版

    1. **下载与解压**:首先从官方或可靠渠道下载DISCUZ7.2ENGLISHBYCOOBY.rar文件,解压缩后得到完整的程序包。 2. **服务器环境准备**:确保服务器运行PHP和MySQL,符合Discuz! 7.2的系统需求。 3. **安装向导**:...

    最新discuz模板discuz7.2用的

    7.2用的”指的是适用于Discuz! 7.2版本的一个新的界面设计,也就是我们常说的论坛皮肤或主题。这个模板采用了红色风格,可能旨在为用户带来更加醒目和热情的视觉体验。 首先,我们需要理解Discuz!模板的作用。模板...

    DIscuz7.2蓝色社区模板插件

    《DIscuz7.2蓝色社区模板插件详解及应用》 DIscuz7.2是一款备受推崇的社区论坛软件,其强大的功能和灵活的扩展性使得它在互联网上拥有广泛的用户基础。其中,蓝色社区模板插件是DIscuz7.2中的一款重要组件,它的...

    Discuz7.2 Water3风格

    Discuz7.2 Water3风格 1. 1、将附件下载后解压缩到当前文件夹,得到一个“water7.2”文件夹; 2. 2、将这个文件夹拷贝到你的论坛的“templates”目录下; 3. 3、登录到论坛后台,到“界面”→“风格管理”,在...

    Discuz_7.2_UTF8环境.rar

    《Discuz!7.2 UTF8环境搭建与数据库结构解析》 Discuz!7.2是一款深受广大站长喜爱的开源论坛系统,它以其强大的社区功能和灵活的扩展性,在中文互联网环境中占据了重要的地位。该系统支持UTF8编码,能够处理各种...

    discuz7.2注入漏洞faq.php

    复现discuz7.2注入漏洞

    discuz 7.2 utf8.zip

    4. 解压安装文件:将`discuz 7.2 utf8.zip`解压到Web服务器的根目录,确保所有文件都能被正确访问。 5. 初始化安装:通过浏览器访问论坛安装地址,按照页面提示进行数据库连接设置、管理员账号创建等步骤,完成初始...

    Discuz_7.2 Ucenter整合

    《Discuz! 7.2与Ucenter整合详解》 Discuz! 7.2是一款由康盛创想(Comsenz)公司开发的社区论坛软件,它以其强大的功能和易用性深受广大站长喜爱。而Ucenter是康盛创想推出的一个统一用户管理平台,能够实现多个...

    Discuz! 7.2

    《Discuz! 7.2:社区论坛运营的利器》 Discuz! 7.2是社区论坛软件的里程碑式版本,它在原有基础上进行了大量的更新和优化,旨在提升用户体验和社区管理效率。这一版本的核心目标是打造一个更加便捷、高效、个性化的...

    discuz7.2数据字典

    dz 7.2的数据字典。有了它还怕不懂dz吗?

    discuz7.2首页多格插件

    discuz7.2首页多格插件discuz7.2首页多格插件discuz7.2首页多格插件discuz7.2首页多格插件discuz7.2首页多格插件discuz7.2首页多格插件discuz7.2首页多格插件

    Discuz!_7.2使用详细说明

    - **升级**:从旧版本升级到7.2,可以通过Discuz! 提供的在线升级工具进行,确保数据安全迁移并更新所有文件。 2. **界面与管理** - **后台管理**:Discuz! 7.2拥有强大的后台管理系统,包括会员管理、版块管理、...

    Discuz!7.2源码分析[郭鑫版]

    本篇文章将深入剖析《Discuz!7.2源码分析》中的关键代码片段及其背后的逻辑,帮助读者理解其内部机制。 #### 二、初始化设置 **1. 错误报告与安全设置** - `error_reporting(0);`:禁用所有的错误报告。 - `set...

    discuz7.2在线观看插件from yang开发

    《Discuz7.2在线观看插件:提升社区互动体验》 Discuz7.2,在中国互联网论坛领域中,是一款广泛使用的开源社区论坛系统。它以其强大的功能、易用性和可扩展性,深受广大站长的喜爱。为了进一步提升用户体验,开发者...

    Discuz_7.2_FULL_SC_UTF8.zip

    《Discuz 7.2 完全安装指南》 Discuz!是一款广泛应用于互联网的社区论坛软件,以其强大的功能和易用性深受广大站长喜爱。本文将详细介绍如何使用"Discuz_7.2_FULL_SC_UTF8.zip"这个压缩包进行安装,让读者能够在...

    完全版-官方UCenter1.5 UCHome2.0 Discuz7.2集成安装包简体GBK.zip

    UCenter/UCenter Home/Discuz! 集成安装包 本集成包集成了以下Comsenz正式版产品: UCenter 1.5 (用户中心) UCenter Home 2.0 (个人空间) Discuz! 7.2 (论坛) 通过本集成安装包,您可以立即全新安装上述...

Global site tag (gtag.js) - Google Analytics