/** * 注册命名空间 */ baidu.namespace.register("baidu.fcphelper"); baidu.fcphelper = (function(){ /** * 创建一个Accordion * @param {Object} data */ var _creatResultItem = function(data){ return '\

\ ' + data.title + ':\ ' + data.count + '\ \

\
' + data.content + '
\ '; }; /** * 获取message.json中定义的相关问题以及建议 * @param {Object} perfix * @param {Object} start * @param {Object} end */ var _get_issue_suggestion = function(perfix,start,end){ var tempArr = []; var tempInt = 0; tempArr.push(''); tempArr.push(''+ ''+ ''+ '' + ''); var addTr = function(_t_title,_t_content) { var _cls = tempInt % 2 == 0 ? 'tr-content-even' : ''; tempArr.push('' + '' + ''); tempArr.push('' + '' + ''); }; var key; for(var i = start;i <= end;i++) { key = ('0000' + i); key = perfix + '_' + key.substr(key.length - 4); addTr(baidu.i18n.getMessage(key),baidu.i18n.getMessage(key + '_suggestion')); } tempArr.push('
序号(Num) 描述(Description)
' + (++tempInt) + '问题' + _t_title + '
建议' + _t_content + '
'); return tempArr.join(''); }; /** * 显示页面上有效的cookie * @param {Object} respData * @param {Object} title * @param {Object} allContent */ var _js_getCookie = function(respData,title,allContent) { var tempArr = []; var tempInt = 0; tempArr.push('
' + baidu.i18n.getMessage('msg0042',[document.cookie.getBytes()]) + '。如下是和整个站点相关的cookie:

'); tempArr.push(''); tempArr.push(''+ ''+ '' + '' + '' + '' + '' + ''); var d = new Date() - 1; jQuery.each(respData.cookies,function(i,cookie){ tempInt++; tempArr.push(''+ ''+ '' + '' + '' + '' + '' + ''); }); tempArr.push('
序号
'); allContent.push(_creatResultItem({ title : title, count : tempInt, content : tempArr.join('') })); //------------------------------------------- jQuery('#fe-helper-box .-f-a-c-d-' + d).live('click',function(e){ var $this = jQuery(this); var $tr = $this.parent().parent(); var key = $tr.children('.td-cookie-name').html().trim(); var storeId = jQuery('#hid-storeId-' + key).val().trim(); //remove cookie chrome.extension.sendMessage({ "type" : MSG_TYPE.REMOVE_COOKIE, "name" : key, "url" : jQuery('#hid-url-' + key).val().trim(), "storeId" : storeId },function(cookie){ var $table = $this.parent().parent().parent(); var idx = $table.index($tr) - 1; var x = 0; $tr.remove(); //更改序号 $table.find('td.td-cookie-linenum').each(function(i,td){ jQuery(td).html((i + 1)); x++; }); //总数 $table.parent().parent().prev().find('.rst-count').html(x); }); }); }; /** * 显示页面上的script标签 * @param {Object} respData * @param {Object} title * @param {Object} allContent */ var _js_getScriptTag = function(respData,title,allContent) { var tempArr = []; var tempInt = 0; tempArr.push(''); tempArr.push(''+ ''+ '' + ''); var addTr = function(_content){ tempArr.push(''+ ''+ ''); }; //script block if(respData.scriptTag.scriptBlock) { addTr(baidu.i18n.getMessage('msg0033',[respData.scriptTag.scriptBlock])); } //script src if(respData.scriptTag.scriptSrc) { addTr(baidu.i18n.getMessage('msg0034',[respData.scriptTag.scriptSrc])); } //JS文件被压缩? if(respData.jsMinified.count > 0) { var t = []; jQuery.each(respData.jsMinified.files,function(k,item){ if(item.href == '#') { t.push(baidu.i18n.getMessage('msg0047',[item.fileName])); } else { t.push(baidu.i18n.getMessage('msg0062',[item.href,item.fileName])); } }); addTr(baidu.i18n.getMessage('msg0045',[t.join('、')])); } //tangram if(respData.tangram.length > 0) { var t = []; jQuery.each(respData.tangram,function(i,item){ t.push(item); }); if(t.length == 1) { addTr(baidu.i18n.getMessage('msg0054',[t.join('')])); } else { addTr(baidu.i18n.getMessage('msg0055',[t.join('、')])); } } //重复引入的文件 if(respData.duplicatedFiles.length) { var dupFile = []; var dupHref = []; var txt = []; jQuery.each(respData.duplicatedFiles,function(i,item){ if(item.dupFiles) { //不同地址的文件,但内容重复 var t = []; jQuery.each(item.dupFiles,function(j,f){ t.push(baidu.i18n.getMessage('msg0069',[f,f])); }); dupFile.push(baidu.i18n.getMessage('msg0070',[t.join('、')])); } else { //同一个地址的文件,被多次引入 dupHref.push(baidu.i18n.getMessage('msg0068',[item.href,item.href,item.count])); } }); if(dupHref.length) { txt.push(baidu.i18n.getMessage('msg0066',['
' + dupHref.join('') + '
'])); } if(dupFile.length) { txt.push(baidu.i18n.getMessage('msg0067',['
' + dupFile.join('') + '
'])); } addTr(txt.join('')); } tempArr.push('
序号(Num)描述(Description)
' + ++tempInt + '' + _content + '
'); allContent.push(_creatResultItem({ title : title, count : tempInt, content : tempArr.join('') })); }; /** * 显示过期标签的检测结果 * @param {Object} respData * @param {Object} title * @param {Object} allContent */ var _html_getHTMLDeprecatedTag = function(respData,title,allContent) { var isEmpty = true; for(var k in respData.HTMLBase.HTMLDeprecatedTag) { isEmpty = false; break; } if(isEmpty) { return; } var tempArr = []; var tempInt = 0; tempArr.push(''); tempArr.push(''+ ''+ '' + ''); jQuery.each(respData.HTMLBase.HTMLDeprecatedTag,function(key,item){ tempInt++; tempArr.push(''+ ''+ ''); }); tempArr.push('
标签(Tag)描述(Description)
' + key + '' + baidu.i18n.getMessage('msg0004',[item]) + baidu.i18n.getMessage('msg0005') + '
'); allContent.push(_creatResultItem({ title : title, count : tempInt, content : tempArr.join('') })); }; /** * 显示过期的属性 * @param {Object} HTMLDeprecatedAttributes * @param {Object} title * @param {Object} allContent */ var _html_getHTMLDeprecatedAttribute = function(respData,title,allContent){ var isEmpty = true; for(var k in respData.HTMLBase.HTMLDeprecatedAttribute) { isEmpty = false; break; } if(isEmpty) { return; } var tempArr = []; var tempInt = 0; tempArr.push(''); tempArr.push(''+ ''+ '' + ''); jQuery.each(respData.HTMLBase.HTMLDeprecatedAttribute,function(key,item){ tempInt++; tempArr.push('' + '' + ''); }); tempArr.push('
属性(Attr)描述(Description)
' + key + '' + (function(){ var arr = []; jQuery.each(item,function(k,v){ arr.push(baidu.i18n.getMessage('msg0007',[ v,k ])); }); return arr.join(''); })() + baidu.i18n.getMessage('msg0005') + '
'); allContent.push(_creatResultItem({ title : title, count : tempInt, content : tempArr.join('') })); }; /** * 获取Link标签的解析结果 * @param {Object} respData * @param {Object} title * @param {Object} allContent */ var _html_getLink = function(respData,title,allContent){ var notInHead = respData.LINK.notInHead; if(notInHead.length == 0) return; var ct = ''; ct = '
' + baidu.i18n.getMessage('msg0021',[notInHead.length, 'head']) + '
'; ct += (function(d){ var arr = ['']; arr.push(''+ ''+ '' + ''); if(notInHead.length) { jQuery.each(d,function(i,link){ arr.push('\ \ \ '); }); } arr.push('
序号(Num)描述(Description)
' + (i + 1) + '' + link.outerHTML.replace(//g,'>') + '
'); return arr.join(''); })(notInHead); allContent.push(_creatResultItem({ title : title, count : notInHead.length, content : ct })); }; /** * 获取标签包含关系 * @param {Object} respData * @param {Object} title * @param {Object} allContent */ var _html_getTagIncludeCase = function(respData,title,allContent){ if(respData.tagInclude.length == 0) return; var ct = ''; ct += (function(d){ var arr = ['']; arr.push(''+ ''+ '' + ''); if(respData.tagInclude.length > 0) { jQuery.each(d,function(id,v){ arr.push('\ \ \ '); }); } arr.push('
序号(Num)描述(Description)
' + (id + 1) + '' + baidu.i18n.getMessage('msg0035',[v.inline,v.block]) + '
'); return arr.join(''); })(respData.tagInclude); allContent.push(_creatResultItem({ title : title, count : respData.tagInclude.length, content : ct })); }; /** * DocumentMode * @param {Object} respData */ var _html_getDocMode = function(respData){ var tempArr = []; var quirksMode = '混杂模式'; var standardsMode = '标准模式'; var mode = (respData.documentMode.WebKit == 'S') ? standardsMode : quirksMode; if (respData.documentMode.hasDocType) { tempArr.push(baidu.i18n.getMessage('msg0009')); if (respData.documentMode.isUnusualDocType) { tempArr.push(baidu.i18n.getMessage('msg0010',[mode,quirksMode])); } if (respData.documentMode.hasConditionalCommentBeforeDTD || respData.documentMode.hasCommentBeforeDTD) { tempArr.push(baidu.i18n.getMessage('msg0011',[mode,quirksMode])); } if (respData.documentMode.IE == respData.documentMode.WebKit) { tempArr.push(baidu.i18n.getMessage('msg0012',[mode])); if (respData.documentMode.WebKit == 'Q') { tempArr.push(baidu.i18n.getMessage('msg0013')); } } else { if (!respData.documentMode.isUnusualDocType) { if (respData.documentMode.IE) { var $1 = (respData.documentMode.IE == 'Q') ? quirksMode : standardsMode; var $2 = (respData.documentMode.WebKit == 'Q') ? quirksMode : standardsMode; tempArr.push(baidu.i18n.getMessage('msg0014',[$1,$2])); tempArr.push(baidu.i18n.getMessage('msg0013')); } else { tempArr.push(baidu.i18n.getMessage('msg0015')); } } else { tempArr.push(baidu.i18n.getMessage('msg0013')); } } } else { // 没有设置DTD tempArr.push(baidu.i18n.getMessage('msg0016',[mode])); tempArr.push(baidu.i18n.getMessage('msg0013')); } return tempArr.join(''); }; /** * 获取DOM解析的结果 * @param {Object} respData * @param {Object} title * @param {Object} allContent */ var _html_getDom = function(respData,title,allContent) { var tempArr = []; var tempInt = 0; tempArr.push(''); tempArr.push(''+ ''+ '' + ''); var addTr = function(text) { tempArr.push('' + ''); }; //doctype addTr(_html_getDocMode(respData)); //总数量 addTr(baidu.i18n.getMessage('msg0028',[respData.DOM.count])); //dom节点的最大嵌套深度 addTr(baidu.i18n.getMessage('msg0063',[respData.DOM.maxDepth.depth,respData.DOM.maxDepth.xpath])); //title标签检测 if(respData.title.length == 0) { addTr(baidu.i18n.getMessage('msg0049') + baidu.i18n.getMessage('msg0052')); } else if(respData.title.length > 1) { addTr(baidu.i18n.getMessage('msg0051') + baidu.i18n.getMessage('msg0052')); } else if(!respData.title[0].isInHead){ addTr(baidu.i18n.getMessage('msg0050') + baidu.i18n.getMessage('msg0052')); } //img标签的src='' if(respData.imgTag.length > 0) { var t = ''; jQuery.each(respData.imgTag,function(i,k){ t = ''; t += k.id ? '#' + k.id : ''; t += t.className ? '.' + t.className.replace(/\s+/g,'.') : ''; t = t ? t : k.outerHTML.replace(//g,'>'); addTr(baidu.i18n.getMessage('msg0053',[t])); }); } //所有注释数量 if(respData.DOM.allComm.length) { //IE条件注释 if (respData.DOM.IECondComm.length) { addTr(baidu.i18n.getMessage('msg0018',[respData.DOM.IECondComm.length])); } //Firefox中不支持的注释:不能出现‘--’ if (respData.DOM.FFNotSptComm.length) { addTr(baidu.i18n.getMessage('msg0060',[respData.DOM.FFNotSptComm.length])); } //所有注释 addTr(baidu.i18n.getMessage('msg0030',[respData.DOM.allComm.length,respData.DOM.allComm.join('').getBytes()]) + baidu.i18n.getMessage('msg0019')); } //重复性的ID if(respData.ID.count) { var id_arr = []; jQuery.each(respData.ID.ids,function(id,v){ id_arr.push(baidu.i18n.getMessage('msg0064',[id,v])); }); addTr(baidu.i18n.getMessage('msg0026',[respData.ID.count,id_arr.join(',')])); } //问题Input if(respData.DOM.invalidInput.count) { addTr(baidu.i18n.getMessage('msg0029',[respData.DOM.invalidInput.count])); } //HTML是否压缩 if(!respData.htmlMinified) { addTr(baidu.i18n.getMessage('msg0043')); } //未闭合的标签 if(respData.unClosedTags.length > 0) { var t = []; jQuery.each(respData.unClosedTags,function(k,item){ t.push(baidu.i18n.getMessage('msg0046',[item])); }); addTr(baidu.i18n.getMessage('msg0038',[t.join('、')])); } tempArr.push('
序号(Num)描述(Description)
' + (++tempInt) + '' + text + '
'); allContent.push(_creatResultItem({ title : title, count : tempInt, content : tempArr.join('') })); }; /** * 检测CSS的使用情况 * @param {Object} respData * @param {Object} title * @param {Object} allContent */ var _css_getCssUsage = function(respData){ var _cssTitles = [ baidu.i18n.getMessage('msg0039'), baidu.i18n.getMessage('msg0040'), baidu.i18n.getMessage('msg0041') ]; var _getCssTable = function(d){ var arr = ['']; arr.push(''+ ''+ '' + ''); jQuery.each(d,function(i,item){ arr.push('' + '' + '' + ''); }); arr.push('
序号(Num)选择器(CSS Selector)
' + (i + 1) + '' + '' + item.selector + '' + '' + item.cssText + '' + '
'); return arr.join(''); }; //style标签内的css检测、link引入的css检测 jQuery.each(respData.styles,function(i,style){ var allContent = []; jQuery.each(style.content,function(j,v){ allContent.push(_creatResultItem({ title : _cssTitles[j], count : v.count, content : _getCssTable(v.content) })); }); //创建tab baidu.fcptabs.addCssTab( style.path, allContent.join('') ); }); }; /** * 汇总css文件中用到的所有背景图片 * @param {Object} respData */ var _css_getBackgroundImages = function(respData,allContent){ var tempArr = []; var lineNum = 0; var tempInt = 0; tempArr.push(''); tempArr.push(''+ ''+ '' + ''); var addTr = function(text) { tempArr.push('' + ''); }; //CSS背景图片的使用情况 if(respData.backgroundImages.length) { var a = []; var d = new Date() - 1; jQuery.each(respData.backgroundImages,function(i,item){ a = [''); addTr(baidu.i18n.getMessage('msg0057',[item.fileName,item.bgImages.length,d]) + a.join('')); tempInt += item.bgImages.length; }); jQuery('#fe-helper-box .-x-expand-' + d).live('click',function(){ var _this = jQuery(this); var _table = _this.parent().next(); if(_table.css('display') == 'none') { _table.slideDown(300); _this.html('收起'); } else { _table.slideUp(300); _this.html('展开'); } }); jQuery('#fe-helper-box .-t-c-b-' + d + ' div').live('mouseover',function(e){ var imgTooltip = jQuery('#fe-img-tootip'); if(!imgTooltip[0]) { imgTooltip = jQuery('load image failed').appendTo('body'); } else { imgTooltip.attr('src',jQuery(this).html().trim()); } imgTooltip.css({ top : e.pageY + 20, left : e.pageX + 20, 'max-width' : 500, 'max-height' : 500 }).show(); }).live('mouseout',function(e){ var imgTooltip = jQuery('#fe-img-tootip'); imgTooltip.hide(); }) } tempArr.push('
序号(Num)描述(Description)
' + (++lineNum) + '' + text + '
'); allContent.push(_creatResultItem({ title : baidu.i18n.getMessage('msg0065'), count : tempInt, content : tempArr.join('') })); }; /** * css检测结果汇总 * @param {Object} respData */ var _css_totalDetectResult = function(respData){ var tempArr = []; var tempInt = 0; var allContent = []; tempArr.push(''); tempArr.push(''+ ''+ '' + ''); var addTr = function(text) { tempArr.push('' + ''); }; //重复引入的文件 if(respData.duplicatedFiles.length) { var dupFile = []; var dupHref = []; var txt = []; jQuery.each(respData.duplicatedFiles,function(i,item){ if(item.dupFiles) { //不同地址的文件,但内容重复 var t = []; jQuery.each(item.dupFiles,function(j,f){ t.push(baidu.i18n.getMessage('msg0069',[f,f])); }); dupFile.push(baidu.i18n.getMessage('msg0070',[t.join('、')])); } else { //同一个地址的文件,被多次引入 dupHref.push(baidu.i18n.getMessage('msg0068',[item.href,item.href,item.count])); } }); if(dupHref.length) { txt.push(baidu.i18n.getMessage('msg0066',['
' + dupHref.join('') + '
'])); } if(dupFile.length) { txt.push(baidu.i18n.getMessage('msg0067',['
' + dupFile.join('') + '
'])); } addTr(txt.join('')); } //CSS文件压缩 if(respData.cssMinified.count > 0) { var t = []; jQuery.each(respData.cssMinified.files,function(k,item){ if(item.href == '#') { t.push(baidu.i18n.getMessage('msg0047',[item.fileName])); } else { t.push(baidu.i18n.getMessage('msg0062',[item.href,item.fileName])); } }); addTr(baidu.i18n.getMessage('msg0044',[t.join('、')])); } //css expression if(respData.expressions.length) { var a = [],t = 0; jQuery.each(respData.expressions,function(i,item){ a.push(baidu.i18n.getMessage('msg0059',[item.fileName,item.count])); t += item.count; }); addTr(baidu.i18n.getMessage('msg0058',[t,a.join('、')])); } tempArr.push('
序号(Num)描述(Description)
' + (++tempInt) + '' + text + '
'); allContent.push(_creatResultItem({ title : baidu.i18n.getMessage('msg0048'), count : tempInt, content : tempArr.join('') })); //背景图片 _css_getBackgroundImages(respData,allContent); //创建tab baidu.fcptabs.addCssTab( baidu.i18n.getMessage('msg0048'), allContent.join('') ); }; /** * HTML侦测,通过调用baidu.html.detect方法进行 */ var _detectHTML = function(){ baidu.html.detect(function(respData){ var content = []; //html.HTMLDeprecatedTag _html_getHTMLDeprecatedTag(respData,baidu.i18n.getMessage('msg0006'),content); //html.HTMLDeprecatedAttribute _html_getHTMLDeprecatedAttribute(respData,baidu.i18n.getMessage('msg0008'),content); //LINK _html_getLink(respData,baidu.i18n.getMessage('msg0022'),content); //获取标签包含关系 _html_getTagIncludeCase(respData,baidu.i18n.getMessage('msg0036'),content); //其他DOM相关处理 _html_getDom(respData,baidu.i18n.getMessage('msg0020'),content); //创建tab baidu.fcptabs.addHtmlTab(content.join('')); }); }; /** * CSS侦测,通过调用baidu.css.detect方法进行 */ var _detectCSS = function(){ baidu.css.detect(function(respData){ //执行检测并查创建tab _css_getCssUsage(respData); //所有检测结果 _css_totalDetectResult(respData); }); }; /** * Javascript侦测,通过调用baidu.js.detect方法进行 */ var _detectJavascript = function(){ baidu.js.detect(function(respData){ var allContent = []; //cookies _js_getCookie(respData,baidu.i18n.getMessage('msg0031'),allContent); //script相关检测 _js_getScriptTag(respData,baidu.i18n.getMessage('msg0032'),allContent); //创建tab baidu.fcptabs.addJavascriptTab(allContent.join('')); }); }; /** * 增加HTML、CSS、Javascript的问题及建议tab */ var _addIssueSuggestionTab = function(){ var _getBtnString = function(_text){ return '' + _text + '>>'; }; //HTML问题及建议 jQuery(_getBtnString('查看更多HTML帮助')).appendTo('#fe-helper-tab-html').click(function(e){ if(!jQuery('#fe-helper-tab-HTML-issue-sug')[0]){ baidu.fcptabs.addIssueSuggestionTab('HTML',_get_issue_suggestion('html',1,42)); } var $allTabs = jQuery( "#fe-helper-main-tab>div"); var index = $allTabs.index( jQuery( '#fe-helper-tab-HTML-issue-sug' ) ); jQuery('#fe-helper-main-tab').tabs( "select" , index ); }); //CSS问题及建议 jQuery(_getBtnString('查看更多CSS帮助')).appendTo('#fe-helper-tab-css').click(function(e){ if(!jQuery('#fe-helper-tab-CSS-issue-sug')[0]){ baidu.fcptabs.addIssueSuggestionTab('CSS',_get_issue_suggestion('css',1,119)); } var $allTabs = jQuery( "#fe-helper-main-tab>div"); var index = $allTabs.index( jQuery( '#fe-helper-tab-CSS-issue-sug' ) ); jQuery('#fe-helper-main-tab').tabs( "select" , index ); }); //Javascript问题及建议 jQuery(_getBtnString('查看更多Javascript帮助')).appendTo('#fe-helper-tab-js').click(function(e){ if(!jQuery('#fe-helper-tab-Javascript-issue-sug')[0]){ baidu.fcptabs.addIssueSuggestionTab('Javascript',_get_issue_suggestion('javascript',1,114)); } var $allTabs = jQuery( "#fe-helper-main-tab>div"); var index = $allTabs.index( jQuery( '#fe-helper-tab-Javascript-issue-sug' ) ); jQuery('#fe-helper-main-tab').tabs( "select" , index ); }); }; /** * 初始化静态文件 */ var _initStaticFile = function(){ //////////先做一些准备工作///////////////////// //css初始化 baidu.css.init(); //js初始化 baidu.js.init(); }; /** * 初始化页面 * @return {[type]} */ var _initHtml = function(callback){ //html初始化 baidu.html.init(callback); }; /** * 执行FCPHelper检测 */ var _detect = function(){ //显示进度条 baidu.fcptabs.createProgressBar(); window.setTimeout(function(){ //HTML侦测 _detectHTML(); //CSS侦测 _detectCSS(); //Javascript侦测 _detectJavascript(); //增加问题及建议Tab _addIssueSuggestionTab(); //检测完毕更新进度条 baidu.fcptabs.updateProgressBar(100); },100); }; return { initStaticFile : _initStaticFile, initHtml : _initHtml, detect : _detect }; })();