/**
* 注册命名空间: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){
//从页面上获取