浏览代码

增加数据不上报的逻辑"

zxlie 3 月之前
父节点
当前提交
4822fd5893
共有 8 个文件被更改,包括 49 次插入29 次删除
  1. 16 20
      apps/background/statistics.js
  2. 1 1
      apps/chrome.json
  3. 1 1
      apps/edge.json
  4. 13 2
      apps/json-format/index.js
  5. 1 1
      apps/manifest.json
  6. 5 0
      apps/options/index.html
  7. 10 3
      apps/options/index.js
  8. 2 1
      apps/options/settings.js

+ 16 - 20
apps/background/statistics.js

@@ -101,39 +101,36 @@ let Statistics = (function() {
      * @returns {Object}
      */
     const getClientInfo = async () => {
-        let tabInfo = {};
-        try {
-            // 获取当前活动tab的页面信息
-            const tabs = await new Promise(resolve => {
-                chrome.tabs.query({active: true, currentWindow: true}, resolve);
-            });
-            if (tabs && tabs.length > 0) {
-                const tab = tabs[0];
-                tabInfo = {
-                    pageUrl: tab.url || '',
-                    pageTitle: tab.title || ''
-                };
-            }
-        } catch (e) {
-            // 忽略tab获取异常
-        }
         const nav = self.navigator || {};
         // 只采集服务端需要的字段
         return {
             userAgent: nav.userAgent || '',
             language: nav.language || '',
             platform: nav.platform || '',
-            extensionVersion: chrome.runtime.getManifest().version,
-            ...tabInfo
+            extensionVersion: chrome.runtime.getManifest().version
         };
     };
 
+    /**
+     * 判断是否允许统计
+     * @returns {Promise<boolean>} true=允许,false=禁止
+     */
+    const isStatisticsAllowed = async () => {
+        try {
+            const forbid = await Awesome.StorageMgr.get('FORBID_STATISTICS');
+            return !(forbid === true || forbid === 'true');
+        } catch (e) {
+            return true;
+        }
+    };
+
     /**
      * 使用自建服务器发送事件数据
      * @param {string} eventName - 事件名称
      * @param {Object} params - 事件参数
      */
     const sendToServer = async (eventName, params = {}) => {
+        if (!(await isStatisticsAllowed())) return;
         const uid = await getUserId();
         const clientInfo = await getClientInfo();
         // 只保留服务端 TrackSchema 需要的字段
@@ -144,8 +141,7 @@ let Statistics = (function() {
         };
         // 只允许 TrackSchema 里的字段
         const allowedFields = [
-            'tool_name', 'extensionVersion', 'browser', 'browserVersion', 'os', 'osVersion',
-            'IP', 'country', 'province', 'city', 'pageUrl', 'pageTitle', 'language', 'platform'
+            'tool_name', 'extensionVersion', 'browser', 'browserVersion', 'os', 'osVersion', 'IP',  'language', 'platform'
         ];
         for (const key of allowedFields) {
             if (params[key] !== undefined) {

+ 1 - 1
apps/chrome.json

@@ -1,7 +1,7 @@
 {
   "name": "FeHelper(前端助手)-Dev",
   "short_name": "FeHelper",
-  "version": "2025.6.2821",
+  "version": "2025.6.2822",
   "manifest_version": 3,
   "description": "JSON自动格式化、手动格式化,支持排序、解码、下载等,更多功能可在配置页按需安装!",
   "icons": {

+ 1 - 1
apps/edge.json

@@ -1,7 +1,7 @@
 {
   "name": "FeHelper(前端助手)-Dev",
   "short_name": "FeHelper",
-  "version": "2025.6.2821",
+  "version": "2025.6.2822",
   "manifest_version": 3,
   "description": "JSON自动格式化、手动格式化,支持排序、解码、下载等,更多功能可在配置页按需安装!",
   "icons": {

+ 13 - 2
apps/json-format/index.js

@@ -752,8 +752,19 @@ function deepParseJSONStrings(obj) {
             if (typeof val === 'string') {
                 try {
                     const parsed = JSON.parse(val);
-                    // 只递归对象或数组
-                    if (typeof parsed === 'object' && parsed !== null) {
+                    // 只递归对象或数组,且排除BigInt结构(如{s,e,c})和纯数字
+                    if (
+                        typeof parsed === 'object' &&
+                        parsed !== null &&
+                        (Array.isArray(parsed) || Object.prototype.toString.call(parsed) === '[object Object]') &&
+                        !(
+                            parsed &&
+                            typeof parsed.s === 'number' &&
+                            typeof parsed.e === 'number' &&
+                            Array.isArray(parsed.c) &&
+                            Object.keys(parsed).length === 3
+                        )
+                    ) {
                         newObj[key] = deepParseJSONStrings(parsed);
                         continue;
                     }

+ 1 - 1
apps/manifest.json

@@ -1,7 +1,7 @@
 {
   "name": "FeHelper(前端助手)-Dev",
   "short_name": "FeHelper",
-  "version": "2025.6.2821",
+  "version": "2025.6.2822",
   "manifest_version": 3,
   "description": "JSON自动格式化、手动格式化,支持排序、解码、下载等,更多功能可在配置页按需安装!",
   "icons": {

+ 5 - 0
apps/options/index.html

@@ -142,6 +142,11 @@
                                 <label for="JSON_PAGE_FORMAT">开启JSON自动美化功能(页面自动检测并格式化,你可在JSON自动美化后进行工具高级定制,包括皮肤等)</label> <br/>
                             </div>
 
+                            <div class="st-item">
+                                <input type="checkbox" value="FORBID_STATISTICS" id="FORBID_STATISTICS" v-model="selectedOpts"/>
+                                <label for="FORBID_STATISTICS">禁止插件做访问统计<span class="x-tips">(勾选后,插件将不会向服务器上报任何统计数据)</span></label> <br/>
+                            </div>
+
                             <div class="st-item" v-if="!isFirefox">
                                 <input type="checkbox" value="AUTO_DARK_MODE" id="AUTO_DARK_MODE" v-model="selectedOpts"/>
                                 <label for="AUTO_DARK_MODE">自动开启夜间模式(<span class="x-tips">眼睛保卫战,晚上<b><i>19:00~06:00</i></b>使用工具的时候自动开启夜间模式)</span></label>

+ 10 - 3
apps/options/index.js

@@ -40,7 +40,7 @@ new Vue({
         showSettingsModal: false,
         defaultKey: 'Alt+Shift+J', // 默认快捷键
         countDown: 0, // 夜间模式倒计时
-        selectedOpts: [], // 选中的选项
+        selectedOpts: [], // 选中的选项(已支持FORBID_STATISTICS)
         menuDownloadCrx: false, // 菜单-插件下载
         menuFeHelperSeting: false, // 菜单-FeHelper设置
         isFirefox: false, // 是否Firefox浏览器
@@ -1063,8 +1063,15 @@ new Vue({
             try {
                 // 构建设置对象
                 let opts = {};
-                ['OPT_ITEM_CONTEXTMENUS', 'FORBID_OPEN_IN_NEW_TAB', 'CONTENT_SCRIPT_ALLOW_ALL_FRAMES', 
-                 'JSON_PAGE_FORMAT', 'AUTO_DARK_MODE', 'ALWAYS_DARK_MODE'].forEach(key => {
+                [
+                    'OPT_ITEM_CONTEXTMENUS',
+                    'FORBID_OPEN_IN_NEW_TAB',
+                    'CONTENT_SCRIPT_ALLOW_ALL_FRAMES',
+                    'JSON_PAGE_FORMAT',
+                    'AUTO_DARK_MODE',
+                    'ALWAYS_DARK_MODE',
+                    'FORBID_STATISTICS' // 新增,确保保存
+                ].forEach(key => {
                     opts[key] = this.selectedOpts.includes(key).toString();
                 });
                 

+ 2 - 1
apps/options/settings.js

@@ -14,7 +14,8 @@ export default (() => {
         'FORBID_OPEN_IN_NEW_TAB': false,
         'AUTO_DARK_MODE': false,
         'ALWAYS_DARK_MODE': false,
-        'CONTENT_SCRIPT_ALLOW_ALL_FRAMES': false
+        'CONTENT_SCRIPT_ALLOW_ALL_FRAMES': false,
+        'FORBID_STATISTICS': false
     };
 
     /**