| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359 | 
							- /**
 
-  * FE-Helper后台运行程序
 
-  * @author [email protected]
 
-  */
 
- var BgPageInstance = (function () {
 
-     //各种元素的就绪情况
 
-     var _readyState = {
 
-         css:false,
 
-         js:false,
 
-         html:true,
 
-         allDone:false
 
-     };
 
-     //侦测的interval
 
-     var _detectInterval = null;
 
-     //侦测就绪情况
 
-     var _detectReadyState = function () {
 
-         _detectInterval = window.setInterval(function () {
 
-             if (_readyState.css && _readyState.js && _readyState.html) {
 
-                 _readyState.allDone = true;
 
-                 window.clearInterval(_detectInterval);
 
-             }
 
-         }, 100);
 
-     };
 
-     /**
 
-      * 执行前端FCPHelper检测
 
-      */
 
-     var _doFcpDetect = function (tab) {
 
-         //所有元素都准备就绪
 
-         if (_readyState.allDone) {
 
-             chrome.tabs.sendMessage(tab.id, {
 
-                 type:MSG_TYPE.BROWSER_CLICKED,
 
-                 event:MSG_TYPE.FCP_HELPER_DETECT
 
-             });
 
-         } else {
 
-             //正在准备数据,请稍等...
 
-             //显示桌面提醒
 
-             baidu.feNotification.notifyText({
 
-                 message:"正在准备数据,请稍等..."
 
-             });
 
-         }
 
-     };
 
-     /**
 
-      * 执行栅格检测
 
-      */
 
-     var _doGridDetect = function (tab) {
 
-         chrome.tabs.sendMessage(tab.id, {
 
-             type:MSG_TYPE.BROWSER_CLICKED,
 
-             event:MSG_TYPE.GRID_DETECT
 
-         });
 
-     };
 
-     /**
 
-      * 提醒层 缓存
 
-      * @type {Array}
 
-      */
 
-     var _notificationCache = [];
 
-     /**
 
-      * 查看页面wpo信息
 
-      */
 
-     var _showPageWpoInfo = function (wpoInfo) {
 
-         chrome.tabs.query({active:true, currentWindow:true}, function (tabs) {
 
-             var tab = tabs[0];
 
-             try {
 
-                 _notificationCache[tab.id].cancel();
 
-             } catch (e) {
 
-             }
 
-             if (!wpoInfo) {
 
-                 baidu.feNotification.notifyText({
 
-                     message:"对不起,检测失败"
 
-                 });
 
-             } else {
 
-                 if (window.webkitNotifications && webkitNotifications.createHTMLNotification) {
 
-                     baidu.feNotification.notifyHtml("template/fehelper_wpo.html?" + JSON.stringify(wpoInfo));
 
-                 } else {
 
-                     chrome.tabs.create({
 
-                         url:"template/fehelper_wpo.html?" + JSON.stringify(wpoInfo),
 
-                         active:true
 
-                     });
 
-                 }
 
-             }
 
-         });
 
-     };
 
-     /**
 
-      * 获取页面wpo信息
 
-      * @return {[type]}
 
-      */
 
-     var _getPageWpoInfo = function () {
 
-         chrome.tabs.query({active:true, currentWindow:true}, function (tabs) {
 
-             var tab = tabs[0];
 
-             //显示桌面提醒
 
-             _notificationCache[tab.id] = baidu.feNotification.notifyText({
 
-                 message:"正在统计,请稍后...",
 
-                 autoClose:false
 
-             });
 
-             chrome.tabs.sendMessage(tab.id, {
 
-                 type:MSG_TYPE.GET_PAGE_WPO_INFO
 
-             });
 
-         });
 
-     };
 
-     /**
 
-      * 执行JS Tracker
 
-      * @private
 
-      */
 
-     var _doJsTracker = function () {
 
-         chrome.tabs.query({active:true, currentWindow:true}, function (tabs) {
 
-             var tab = tabs[0];
 
-             chrome.tabs.executeScript(tab.id, {
 
-                 code:"void function(t,r,a,c,k){t.tracker_type='bm';t.tracker_uid='fehelper';"
 
-                     + "(k=t.TrackerGlobalEvent)?k.f(r):[(k=t[a]('script')).charset='utf-8',"
 
-                     + "k.src='http://www.ucren.com/'+c+'/'+c+'.js?'+Math.random(),"
 
-                     + "t.documentElement.appendChild(k)]}(document,'TrackerJSLoad','createElement','tracker') ",
 
-                 allFrames:false,
 
-                 runAt:'document_end'
 
-             });
 
-         });
 
-     };
 
-     /**
 
-      * 代码压缩工具
 
-      * @private
 
-      */
 
-     var _goCompressTool = function () {
 
-         var url = "http://www.baidufe.com/fehelper/codecompress.html";
 
-         chrome.tabs.query({windowId:chrome.windows.WINDOW_ID_CURRENT }, function (tabs) {
 
-             var isOpened = false;
 
-             var tabId;
 
-             var reg = new RegExp("fehelper.*codecompress.html$", "i");
 
-             for (var i = 0, len = tabs.length; i < len; i++) {
 
-                 if (reg.test(tabs[i].url)) {
 
-                     isOpened = true;
 
-                     tabId = tabs[i].id;
 
-                     break;
 
-                 }
 
-             }
 
-             if (!isOpened) {
 
-                 chrome.tabs.create({
 
-                     url:url,
 
-                     active:true
 
-                 });
 
-             } else {
 
-                 chrome.tabs.update(tabId, {highlighted:true});
 
-             }
 
-         });
 
-     };
 
-     /**
 
-      * 打开对应文件,运行该Helper
 
-      * @param tab
 
-      * @param file
 
-      * @private
 
-      */
 
-     var _openFileAndRun = function (tab, file) {
 
-         chrome.tabs.query({windowId:chrome.windows.WINDOW_ID_CURRENT }, function (tabs) {
 
-             var isOpened = false;
 
-             var tabId;
 
-             var reg = new RegExp("^chrome.*" + file + ".html$", "i");
 
-             for (var i = 0, len = tabs.length; i < len; i++) {
 
-                 if (reg.test(tabs[i].url)) {
 
-                     isOpened = true;
 
-                     tabId = tabs[i].id;
 
-                     break;
 
-                 }
 
-             }
 
-             if (!isOpened) {
 
-                 chrome.tabs.create({
 
-                     url:'template/fehelper_' + file + '.html',
 
-                     active:true
 
-                 });
 
-             } else {
 
-                 chrome.tabs.update(tabId, {highlighted:true});
 
-             }
 
-         });
 
-     };
 
-     /**
 
-      * 根据给定参数,运行对应的Helper
 
-      */
 
-     var _runHelper = function (config) {
 
-         chrome.tabs.query({active:true, currentWindow:true}, function (tabs) {
 
-             var tab = tabs[0];
 
-             // 如果是采用独立文件方式访问,直接打开该页面即可
 
-             if (config.useFile == '1') {
 
-                 _openFileAndRun(tab, config.msgType);
 
-             } else {
 
-                 switch (config.msgType) {
 
-                     //fcphelper检测
 
-                     case MSG_TYPE.FCP_HELPER_DETECT:
 
-                         _doFcpDetect(tab);
 
-                         break;
 
-                     //栅格检测
 
-                     case MSG_TYPE.GRID_DETECT:
 
-                         _doGridDetect(tab);
 
-                         break;
 
-                     //查看网页加载时间
 
-                     case MSG_TYPE.SHOW_PAGE_LOAD_TIME:
 
-                         _getPageWpoInfo();
 
-                         break;
 
-                     //js tracker
 
-                     case MSG_TYPE.JS_TRACKER:
 
-                         _doJsTracker();
 
-                         break;
 
-                     //代码压缩
 
-                     case MSG_TYPE.CODE_COMPRESS:
 
-                         _goCompressTool();
 
-                         break;
 
-                 }
 
-             }
 
-         });
 
-     };
 
-     /**
 
-      * 创建扩展专属的右键菜单
 
-      */
 
-     var _createContextMenu = function () {
 
-         _removeContextMenu();
 
-         baidu.contextMenuId = chrome.contextMenus.create({
 
-             title:"FeHelper-FE助手"
 
-         });
 
-         chrome.contextMenus.create({
 
-             title:"编码检测",
 
-             parentId:baidu.contextMenuId,
 
-             onclick:function (info, tab) {
 
-                 //编码检测
 
-                 _doFcpDetect(tab);
 
-             }
 
-         });
 
-         chrome.contextMenus.create({
 
-             title:"栅格检测",
 
-             parentId:baidu.contextMenuId,
 
-             onclick:function (info, tab) {
 
-                 //执行栅格检测
 
-                 _doGridDetect(tab);
 
-             }
 
-         });
 
-         chrome.contextMenus.create({
 
-             title:"网页加载耗时",
 
-             parentId:baidu.contextMenuId,
 
-             onclick:function (info, tab) {
 
-                 //网页加载耗时
 
-                 _getPageWpoInfo();
 
-             }
 
-         });
 
-     };
 
-     /**
 
-      * 移除扩展专属的右键菜单
 
-      */
 
-     var _removeContextMenu = function () {
 
-         if (!baidu.contextMenuId) return;
 
-         chrome.contextMenus.remove(baidu.contextMenuId);
 
-         baidu.contextMenuId = null;
 
-     };
 
-     /**
 
-      * 创建或移除扩展专属的右键菜单
 
-      */
 
-     var _createOrRemoveContextMenu = function () {
 
-         //管理右键菜单
 
-         if (baidu.feOption.getOptionItem('opt_item_contextMenus') === 'true') {
 
-             _createContextMenu();
 
-         } else {
 
-             _removeContextMenu();
 
-         }
 
-     };
 
-     /**
 
-      * 接收来自content_scripts发来的消息
 
-      */
 
-     var _addExtensionListener = function () {
 
-         chrome.runtime.onMessage.addListener(function (request, sender, callback) {
 
-             //处理CSS的请求
 
-             if (request.type == MSG_TYPE.GET_CSS) {
 
-                 //直接AJAX获取CSS文件内容
 
-                 baidu.network.readFileContent(request.link, callback);
 
-             }
 
-             //处理JS的请求
 
-             else if (request.type == MSG_TYPE.GET_JS) {
 
-                 //直接AJAX获取JS文件内容
 
-                 baidu.network.readFileContent(request.link, callback);
 
-             }
 
-             //处理HTML的请求
 
-             else if (request.type == MSG_TYPE.GET_HTML) {
 
-                 //直接AJAX获取JS文件内容
 
-                 baidu.network.readFileContent(request.link, callback);
 
-             }
 
-             //处理cookie
 
-             else if (request.type == MSG_TYPE.GET_COOKIE) {
 
-                 baidu.network.getCookies(request, callback);
 
-             }
 
-             //移除cookie
 
-             else if (request.type == MSG_TYPE.REMOVE_COOKIE) {
 
-                 baidu.network.removeCookie(request, callback);
 
-             }
 
-             //设置cookie
 
-             else if (request.type == MSG_TYPE.SET_COOKIE) {
 
-                 baidu.network.setCookie(request, callback);
 
-             }
 
-             //CSS准备就绪
 
-             else if (request.type == MSG_TYPE.CSS_READY) {
 
-                 _readyState.css = true;
 
-             }
 
-             //JS准备就绪
 
-             else if (request.type == MSG_TYPE.JS_READY) {
 
-                 _readyState.js = true;
 
-             }
 
-             //HTML准备就绪
 
-             else if (request.type == MSG_TYPE.HTML_READY) {
 
-                 _readyState.html = true;
 
-             }
 
-             //提取配置项
 
-             else if (request.type == MSG_TYPE.GET_OPTIONS) {
 
-                 baidu.feOption.doGetOptions(request.items, callback);
 
-             }
 
-             //保存配置项
 
-             else if (request.type == MSG_TYPE.SET_OPTIONS) {
 
-                 baidu.feOption.doSetOptions(request.items, callback);
 
-                 //管理右键菜单
 
-                 _createOrRemoveContextMenu();
 
-             }
 
-             //保存当前网页加载时间
 
-             else if (request.type == MSG_TYPE.CALC_PAGE_LOAD_TIME) {
 
-                 _showPageWpoInfo(request.wpo);
 
-             }
 
-             // 从popup中点过来的
 
-             else if (request.type == MSG_TYPE.FROM_POPUP) {
 
-                 _runHelper(request.config);
 
-             }
 
-             return true;
 
-         });
 
-     };
 
-     /**
 
-      * 初始化
 
-      */
 
-     var _init = function () {
 
-         _addExtensionListener();
 
-         _detectReadyState();
 
-         _createOrRemoveContextMenu();
 
-     };
 
-     return {
 
-         init:_init,
 
-         runHelper:_runHelper
 
-     };
 
- })();
 
- //初始化
 
- BgPageInstance.init();
 
 
  |