/** * 注册命名空间:baidu.js */ baidu.namespace.register("baidu.js"); /** * js相关处理 * @author zhaoxianlie */ baidu.js = (function(){ var _readyQueen = null; var _asyncInterface = 0; var _scriptBlockCount = 0; /** * js源代码 * @item {fileName:'',fileContent:''} */ var _rawJsSource = []; /** * 页面cookies */ _cookies = []; /** * 结果集 */ var _summaryInformation = null; /** * 初始化js文件的读取队列 * @param {Object} isFinished 是否读取完成 */ var _initReadyQueen = function(isFinished){ _readyQueen = { curIndex : 0, //当前正处于读取的index queen : [], //js文件队列,格式为:{src:"",block:""},其中src和block不可能同时有值 callback : new Function(), //回调方法 finished : isFinished //是否读取完成 }; }; /** * 增加一项读取项 * @param {Object} readyItem 格式为:{src:Object,block:Object} */ var _addReadyItem = function(readyItem){ _readyQueen.queen.push(readyItem); }; /** * 获取当前正在解析的script块 */ var _getCurrentReadyItem = function(){ return _readyQueen.queen[_readyQueen.curIndex]; }; /** * 判断当前读取的是否为最后一个script块 */ var _isLastReadyItem = function(){ return (_readyQueen.curIndex == _readyQueen.queen.length); }; /** * 读取队列移动到下一个元素 */ var _moveToNextReadyItem = function(){ _readyQueen.curIndex += 1; }; /** * 判断当前队列是否读取完毕 */ var _isDealFinished = function(){ return _readyQueen.finished; }; /** * 根据文件路径,提取文件名 * @param {Object} path 文件url */ var _getFileName = function(path){ var reg = /(.*\/)([^\/]+\.js)/; var p = reg.exec((path || '').replace(/\?.*/,'')); return p ? p[2] : path ? ('异步接口' + ++_asyncInterface) : ('script块' + ++_scriptBlockCount); }; /** * 初始化侦测结果 */ var _initSummaryInformation = function(){ _summaryInformation = { cookies: [], //有效的cookie,[{key:'',value:''}] scriptTag : { scriptBlock:0, //页面上的数量 scriptSrc:0 //页面上的数量 }, domain : false, //document是否设置了domain,设置了则domain值为document.domain jsMinified : { //js文件是否被压缩 files : [], count : 0 }, tangram : [], //页面上引用的tangram duplicatedFiles : [] //重复的文件 }; }; /** * 保存JS代码 * @param {Object} _filePath 文件完整路径 * @param {Object} _fileContent 内容 */ var _saveJsSource = function(_filePath,_fileContent){ //过滤CSS注释 _fileContent = _fileContent.replace(/\/\*[\S\s]*?\*\//g,''); //提取文件名 var _fileName = _getFileName(_filePath); _rawJsSource.push({ href : _filePath ? _filePath : '#', fileName : _fileName, fileContent : _fileContent }); }; /** * 将scripts归类进行检测 * @param {Array} scripts Script对象数组 */ var _getJsData = function(scripts){ //从页面上获取