(params)
| 459 | |
| 460 | /* ================== 启动入口(按 runAt 触发) ================== */ |
| 461 | const start = (params) => { |
| 462 | try { |
| 463 | if (!params || !params.url || params.tabId == null) return true; |
| 464 | let runAt = params.runAt || 'document-end'; |
| 465 | let frameId = typeof params.frameId === 'number' ? params.frameId : 0; |
| 466 | |
| 467 | chrome.storage.local.get(PAGE_MONKEY_LOCAL_STORAGE_KEY, (resps) => { |
| 468 | let raw, storageMode = false; |
| 469 | if ((!resps || !resps[PAGE_MONKEY_LOCAL_STORAGE_KEY]) && typeof localStorage !== 'undefined') { |
| 470 | raw = localStorage.getItem(PAGE_MONKEY_LOCAL_STORAGE_KEY) || '[]'; |
| 471 | storageMode = true; |
| 472 | } else { |
| 473 | raw = (resps && resps[PAGE_MONKEY_LOCAL_STORAGE_KEY]) || '[]'; |
| 474 | } |
| 475 | |
| 476 | let monkeys = []; |
| 477 | try { monkeys = JSON.parse(raw); } catch (e) {} |
| 478 | monkeys = monkeys.map(migrateMonkey); |
| 479 | |
| 480 | monkeys |
| 481 | .filter(cm => !cm.mDisabled) |
| 482 | .filter(cm => (cm.mRunAt || 'document-end') === runAt) |
| 483 | .filter(cm => isMatch(cm, params.url)) |
| 484 | .filter(cm => frameId === 0 || !!cm.mAllFrames) |
| 485 | .forEach(cm => injectMonkey(params.tabId, frameId, cm)); |
| 486 | |
| 487 | if (storageMode) { |
| 488 | let data = {}; data[PAGE_MONKEY_LOCAL_STORAGE_KEY] = raw; |
| 489 | chrome.storage.local.set(data); |
| 490 | } |
| 491 | }); |
| 492 | } catch (e) { |
| 493 | console.log('monkey error', e); |
| 494 | } |
| 495 | return true; |
| 496 | }; |
| 497 | |
| 498 | /* ================== 日志收集 ================== */ |
| 499 | const log = (params) => { |
nothing calls this directly
no test coverage detected