From ca94c6c780f5d737b4e1b72dd033f8501e3aedef Mon Sep 17 00:00:00 2001 From: cilame Date: Thu, 1 Dec 2022 02:10:21 +0800 Subject: [PATCH] add --- background.js | 53 +++++++++++++++++++++++++++++++++++++++------------ options.html | 3 ++- options.js | 41 ++++++++++++++++++++++++++++++++++++++- 3 files changed, 83 insertions(+), 14 deletions(-) diff --git a/background.js b/background.js index 7c4081f..627a473 100644 --- a/background.js +++ b/background.js @@ -39,10 +39,10 @@ chrome.contextMenus.create({ function init_edit_function(){ chrome.storage.local.get(["config-request_hook"], function (res) { try{ - var code = res["config-request_hook"] - // TODO + window.eval(res["config-request_hook"]) }catch(e){ - console.log(e) + change_request = undefined; + console.log('evaluate code init change_request func err.', e) } }) } @@ -132,16 +132,45 @@ chrome.debugger.onEvent.addListener(function (source, method, params){ }else{ var options = { requestId: params.requestId } if (edit_request){ - var url = params.request.url - var method = params.request.method - var postData = params.request.postData - var headers = params.request.headers - // console.log(method, url, headers, postData) + var { url, method, postData, headers } = params.request + var config = { url, method, postData, headers } + + if (typeof change_request != 'undefined'){ + try{ + change_request(config) + }catch(e){ + console.log('run change_request err.', e) + } + } + + var { url, method, postData, headers } = config + + function base64(str){ + return CryptoJS.enc.Utf8.parse(str).toString(CryptoJS.enc.Base64) + } // 这里处理更新操作 - // options.url = url - // options.method = method - // options.postData = postData - // options.headers = headers // 这里直接放进去似乎还会有问题 + try{ + if (url){ + options.url = url + } + if (method){ + options.method = method + } + if (postData){ + options.postData = base64(postData) + } + if (headers){ + var keys = Object.keys(headers) + var headers_list = [] + for (var i = 0; i < keys.length; i++) { + headers_list.push({name:keys[i], value:headers[keys[i]]}) + } + options.headers = headers_list + } + }catch(e){ + console.log('set change request err.', e) + } + console.log('change request options:', options) } sendCommand("Fetch.continueRequest", options, source); break; diff --git a/options.html b/options.html index c58e765..def5f82 100644 --- a/options.html +++ b/options.html @@ -139,8 +139,9 @@

动态修改请求包

+
- +

动态修改被调试页面的所有js代码


diff --git a/options.js b/options.js index 8431564..b1393c9 100644 --- a/options.js +++ b/options.js @@ -487,10 +487,49 @@ var fetch_hook = document.getElementById('fetch_hook'); chrome.storage.local.get([fetch_hook.dataset.key], function (result) { fetch_hook.value = result[fetch_hook.dataset.key] || ''; }) -fetch_hook.addEventListener("change", function(v){ +function change_fetch_hook(v){ console.log('change_fetch_hook') chrome.storage.local.set({ [v.target.dataset.key]: v.target.value }) +} +fetch_hook.addEventListener("input", change_fetch_hook) +fetch_hook.addEventListener("change", change_fetch_hook) +fetch_hook.addEventListener("blur", change_fetch_hook) +var request_hook = document.getElementById('request_hook') +chrome.storage.local.get([request_hook.dataset.key], function (result) { + request_hook.value = result[request_hook.dataset.key] || ''; +}) +function change_request_hook(v){ console.log('change_request_hook') + chrome.storage.local.set({ + [v.target.dataset.key]: v.target.value + }) +} +request_hook.addEventListener("input", change_request_hook) +request_hook.addEventListener("change", change_request_hook) +request_hook.addEventListener("blur", change_request_hook) +var default_code_dyn_change_request = document.getElementById('default_code_dyn_change_request') +default_code_dyn_change_request.addEventListener('click', function(e){ + request_hook.value = +`/* + * 在固定的函数名字里面编写你需要对特定参数修改的处理方式 + * 请勿修改下面函数的名字,需要的处理在函数内部处理即可 + * change_request 这个函数用于修改 Request 请求中的数据 + * 将修改后的值赋值给 config 就可以修改内容 + */ + +function change_request(config){ + var { url, method, postData, headers } = config + var new_url = url + var new_method = method + var new_postData = postData + var new_headers = headers + + // do something in here. + console.log('new_postData', new_postData) + + config.postData = new_postData +}` + request_hook.focus() }) var myinject = document.getElementById('myinject');