mirror of
https://git.mirrors.martin98.com/https://github.com/cilame/v_jstools
synced 2025-08-01 03:12:02 +08:00
484 lines
16 KiB
JavaScript
484 lines
16 KiB
JavaScript
window.onload = function() {
|
|
var nav = document.getElementById('nav');
|
|
var oNav = nav.getElementsByTagName('button');
|
|
var container = document.getElementById('container');
|
|
var oDiv = container.getElementsByClassName('tab');
|
|
for (var i = 0; i < oNav.length; i++) {
|
|
oNav[i].index = i;
|
|
oNav[i].onclick = function() {
|
|
for (var i = 0; i < oNav.length; i++) {
|
|
oNav[i].className = '';
|
|
oDiv[i].style.display = "none";
|
|
}
|
|
this.className = 'act';
|
|
oDiv[this.index].style.display = "block"
|
|
}
|
|
for (var m = 1; m < oNav.length; m++) {
|
|
oNav[m].className = '';
|
|
oDiv[m].style.display = "none";
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
// getsets_0
|
|
// funcs_0
|
|
// getsets_1
|
|
// funcs_1
|
|
|
|
function _mk_html(input, clsname, index){
|
|
var div = document.getElementById(clsname)
|
|
div.innerHTML += `
|
|
<label ><input class="${clsname}-e0" type="checkbox" id="${clsname}" data-key="config-hook-all-${clsname}" vilame="${index}">${clsname} 全选/全不选<br /> </label>
|
|
`
|
|
var htmls = []
|
|
var keys = []
|
|
for (var i = 0; i < input.length; i++) {
|
|
var kv = input[i]
|
|
var k = kv[0]
|
|
var v = kv[1]
|
|
if (keys.indexOf(k) == -1){
|
|
keys.push(k)
|
|
htmls.push(`<label style="margin-left: 20px" >${k}<br /> </label>`)
|
|
}
|
|
htmls.push(`<label style="margin-left: 40px; display:block" ><input class="${clsname}-e2" checked=true type="checkbox" data-key="config-hook-${k}-${v}" vilame="${index}">${k} ${v}<br /></label> `)
|
|
}
|
|
div.innerHTML += htmls.join('')
|
|
}
|
|
|
|
_mk_html(getsets_0, 'getsets_0', 0)
|
|
_mk_html(funcs_0, 'funcs_0', 0)
|
|
_mk_html(getsets_1, 'getsets_1', 1)
|
|
_mk_html(funcs_1, 'funcs_1', 1)
|
|
|
|
document.querySelectorAll("input").forEach(function(v){
|
|
if(!v.dataset.key) return
|
|
chrome.storage.local.get([v.dataset.key], function (result) {
|
|
if (v.type == 'checkbox'){
|
|
v.checked = result[v.dataset.key];
|
|
}
|
|
if (v.type == 'text' || v.type == 'password'){
|
|
v.value = result[v.dataset.key] || '';
|
|
}
|
|
})
|
|
v.addEventListener("change", function (e) {
|
|
if (v.type == 'checkbox'){
|
|
// console.log(e.target.dataset.key, e.target.checked)
|
|
chrome.storage.local.set({
|
|
[e.target.dataset.key]: e.target.checked
|
|
})
|
|
if (e.target.dataset.key == 'config-pac_proxy'){
|
|
if (e.target.checked){
|
|
chrome.storage.local.get(['config-proxy_config'], function(res){
|
|
if (res['config-proxy_config']){
|
|
set_my_proxy(res['config-proxy_config'])
|
|
}
|
|
})
|
|
}else{
|
|
set_my_proxy()
|
|
}
|
|
}
|
|
sub_logger()
|
|
}
|
|
if (v.type == 'text' || v.type == 'password'){
|
|
chrome.storage.local.set({
|
|
[e.target.dataset.key]: e.target.value
|
|
})
|
|
}
|
|
})
|
|
})
|
|
|
|
function changer(name, index, v){
|
|
if (v.target.dataset.key.indexOf('config-hook-all-') === -1){
|
|
chrome.storage.local.set({
|
|
[v.target.dataset.key]: v.target.checked
|
|
})
|
|
return
|
|
}
|
|
var ck = v.target.checked
|
|
var wt = {}
|
|
document.querySelectorAll("input").forEach(function(v){
|
|
if (v.className.indexOf(name) !== -1){
|
|
if (+v.getAttribute('vilame') == index){
|
|
v.checked = ck
|
|
wt[v.dataset.key] = v.checked
|
|
}
|
|
}
|
|
})
|
|
chrome.storage.local.set(wt)
|
|
}
|
|
|
|
document.getElementById('getsets_0').addEventListener("change", changer.bind(null, 'getsets_0', 0))
|
|
document.getElementById('funcs_0').addEventListener("change", changer.bind(null, 'funcs_0', 0))
|
|
document.getElementById('getsets_1').addEventListener("change", changer.bind(null, 'getsets_1', 1))
|
|
document.getElementById('funcs_1').addEventListener("change", changer.bind(null, 'funcs_1', 1))
|
|
|
|
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] || '';
|
|
})
|
|
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.
|
|
if (method == 'POST'){
|
|
console.log('new_postData', new_postData)
|
|
config.postData = new_postData
|
|
}
|
|
}`
|
|
request_hook.focus()
|
|
})
|
|
|
|
var myinject = document.getElementById('myinject');
|
|
chrome.storage.local.get([myinject.dataset.key], function (result) {
|
|
myinject.value = result[myinject.dataset.key] || '';
|
|
})
|
|
myinject.addEventListener("change", function(v){
|
|
chrome.storage.local.set({
|
|
[v.target.dataset.key]: v.target.value
|
|
})
|
|
})
|
|
var myinject_2 = document.getElementById('myinject_2');
|
|
chrome.storage.local.get([myinject_2.dataset.key], function (result) {
|
|
myinject_2.value = result[myinject_2.dataset.key] || '';
|
|
})
|
|
myinject_2.addEventListener("change", function(v){
|
|
chrome.storage.local.set({
|
|
[v.target.dataset.key]: v.target.value
|
|
})
|
|
})
|
|
|
|
var get_now = document.getElementById('get_now');
|
|
get_now.addEventListener("click", function(){
|
|
var show_now = document.getElementById('show_now')
|
|
show_now.value = +new Date+''
|
|
chrome.storage.local.set({
|
|
[show_now.dataset.key]: show_now.value
|
|
})
|
|
})
|
|
|
|
var cookie_match = document.getElementById('cookie_match');
|
|
cookie_match.addEventListener("click", function(){
|
|
var show_now = document.getElementById('show_now')
|
|
show_now.value = +new Date+''
|
|
chrome.storage.local.set({
|
|
[show_now.dataset.key]: show_now.value
|
|
})
|
|
})
|
|
|
|
|
|
|
|
function clear_mode(func, is_comment){
|
|
var code = /\{([\w\W]*)\}/.exec(func+'')[1]
|
|
if (is_comment){
|
|
code = code.replace(/\/\*\*([\w\W]*?)\*\//, '$1')
|
|
}
|
|
return code.trim()
|
|
}
|
|
|
|
var websocket_js = document.getElementById('websocket_js');
|
|
websocket_js.addEventListener("click", function(){
|
|
var code_model = document.getElementById('code_model')
|
|
code_model.value = clear_mode(mk_websocket_js_code)
|
|
})
|
|
|
|
var websocket_py = document.getElementById('websocket_py');
|
|
websocket_py.addEventListener("click", function(){
|
|
var code_model = document.getElementById('code_model')
|
|
code_model.value = clear_mode(mk_websocket_py_code, true)
|
|
})
|
|
|
|
var websocket_hook = document.getElementById('websocket_hook');
|
|
websocket_hook.addEventListener("click", function(){
|
|
var code_model = document.getElementById('code_model')
|
|
code_model.value = clear_mode(mk_websocket_hook_code)
|
|
})
|
|
|
|
var proxy_js = document.getElementById('proxy_js');
|
|
proxy_js.addEventListener("click", function(){
|
|
var code_model = document.getElementById('code_model')
|
|
code_model.value = clear_mode(mk_proxy_code)
|
|
})
|
|
|
|
var code_model = document.getElementById('code_model')
|
|
code_model.ondragover = function(e) {
|
|
e.preventDefault();
|
|
}
|
|
code_model.ondrop = function(e) {
|
|
e.preventDefault();
|
|
var f = e.dataTransfer.files[0];
|
|
var fr = new FileReader();
|
|
fr.readAsDataURL(f);
|
|
fr.onload = function(e) {
|
|
code_model.value = this.result;
|
|
}
|
|
}
|
|
|
|
var my_code_dec = document.getElementById('my_code_dec')
|
|
my_code_dec.ondragover = function(e) {
|
|
e.preventDefault();
|
|
}
|
|
my_code_dec.ondrop = function(e) {
|
|
e.preventDefault();
|
|
var f = e.dataTransfer.files[0];
|
|
var fr = new FileReader();
|
|
fr.readAsText(f);
|
|
fr.onload = function(e) {
|
|
my_code_dec.value = this.result;
|
|
}
|
|
}
|
|
|
|
var add_script_in_all_document = document.getElementById('add_script_in_all_document');
|
|
add_script_in_all_document.addEventListener("click", function(){
|
|
debug_tab = true
|
|
chrome.tabs.query({}, function(tabs) {
|
|
for (var i = 0; i < tabs.length; i++) {
|
|
if (tabs[i].url.indexOf("chrome") == 0){
|
|
continue
|
|
}
|
|
attach_tab_debug(tabs[i].id)
|
|
}
|
|
});
|
|
})
|
|
|
|
var cache_tabid_new = {}
|
|
var cache_tabid_att = {}
|
|
var debug_tab = false
|
|
function attach_tab_debug(tabId){
|
|
cache_tabid_new[tabId] = 1
|
|
var tabids = Object.keys(cache_tabid_new)
|
|
for (var i = 0; i < tabids.length; i++) {
|
|
if (cache_tabid_new[tabids[i]] == 1 && !cache_tabid_att[tabids[i]]){
|
|
cache_tabid_att[tabids[i]] = 1
|
|
var currtab = { tabId: +tabids[i] };
|
|
chrome.debugger.attach(currtab, "1.2", function () {
|
|
chrome.debugger.sendCommand(currtab, "Page.enable", function(){});
|
|
chrome.debugger.sendCommand(currtab, "Page.addScriptToEvaluateOnNewDocument", {
|
|
source: myinject_2.value
|
|
}, function(){});
|
|
});
|
|
}
|
|
}
|
|
}
|
|
function attach_tab_debug_update(tabId, changeInfo, tab) {
|
|
if (tab.url.indexOf('chrome://') == 0) return
|
|
if (!debug_tab) return
|
|
attach_tab_debug(tabId)
|
|
}
|
|
chrome.tabs.onUpdated.addListener(attach_tab_debug_update);
|
|
chrome.debugger.onDetach.addListener(function(){
|
|
cache_tabid_new = {}
|
|
cache_tabid_att = {}
|
|
debug_tab = false
|
|
})
|
|
|
|
var proxy_config = document.getElementById('proxy_config')
|
|
proxy_config.placeholder = `// 请在第一行输出你使用的 pac 路径例如:
|
|
// 1: PROXY 127.0.0.1:8888
|
|
// 2: HTTPS hk2.link.ac.cn:152;HTTPS fmt1.link.ac.cn:995
|
|
`
|
|
chrome.storage.local.get([proxy_config.dataset.key], function (result) {
|
|
proxy_config.value = result[proxy_config.dataset.key] || '';
|
|
})
|
|
function change_proxy_config(v){ console.log('change_proxy_config')
|
|
chrome.storage.local.set({
|
|
[v.target.dataset.key]: v.target.value
|
|
})
|
|
}
|
|
proxy_config.addEventListener("input", change_proxy_config)
|
|
proxy_config.addEventListener("change", change_proxy_config)
|
|
proxy_config.addEventListener("blur", change_proxy_config)
|
|
|
|
var mysec = document.getElementById('my_secret')
|
|
var mycode_dec = document.getElementById('my_code_dec')
|
|
document.getElementById('myenc').addEventListener('click', function(e){
|
|
try{
|
|
var md5 = CryptoJS.MD5(mysec.value)+''
|
|
var srcs = CryptoJS.enc.Utf8.parse(mycode_dec.value)
|
|
var key = CryptoJS.enc.Utf8.parse(md5.slice(0, 16)); //16位
|
|
var iv = CryptoJS.enc.Utf8.parse(md5.slice(16));
|
|
var encrypted = CryptoJS.AES.encrypt(srcs, key, {
|
|
iv: iv,
|
|
mode: CryptoJS.mode.CBC,
|
|
padding: CryptoJS.pad.Pkcs7
|
|
}).toString()
|
|
mycode_dec.value = encrypted
|
|
}catch(e){
|
|
mycode_dec.value = e
|
|
}
|
|
})
|
|
document.getElementById('mydec').addEventListener('click', function(e){
|
|
try{
|
|
var md5 = CryptoJS.MD5(mysec.value)+''
|
|
var key = CryptoJS.enc.Utf8.parse(md5.slice(0, 16)); //16位
|
|
var iv = CryptoJS.enc.Utf8.parse(md5.slice(16));
|
|
var decrypted = CryptoJS.AES.decrypt(mycode_dec.value, key, {
|
|
iv: iv,
|
|
mode: CryptoJS.mode.CBC,
|
|
padding: CryptoJS.pad.Pkcs7
|
|
}).toString(CryptoJS.enc.Utf8)
|
|
mycode_dec.value = decrypted
|
|
}catch(e){
|
|
mycode_dec.value = e
|
|
}
|
|
})
|
|
|
|
function response_changer_init(idname, titlenames, init_data, callback) {
|
|
var cid = "#" + idname
|
|
var trlast = cid + " tr:last"
|
|
var opindex = titlenames.length
|
|
var title = "<tr>"
|
|
for (var i = 0; i < titlenames.length; i++) {
|
|
title += "<td>" + titlenames[i].split('|')[0] + "</td>"
|
|
}
|
|
title += "<td>操作</td>"
|
|
title += "</tr>"
|
|
title += '<tr><td colspan="5"><button>添加行</button><button>添加示例1(重定向到本地文件)</button><button>添加示例2(直接修改返回值)</button></td></tr>'
|
|
$(cid).html(title)
|
|
$($(trlast).find("button")[0]).click(function() {
|
|
addRow()
|
|
})
|
|
$($(trlast).find("button")[1]).click(function() {
|
|
addRow(["baidu.com", "file:///C:/Users/Administrator/Desktop/test.html", "redirect local."]) // 这里的最后一个值不能随意修改
|
|
__cache_data()
|
|
})
|
|
$($(trlast).find("button")[2]).click(function() {
|
|
addRow(["baidu.com", "console.log(123)", "change return data."]) // 这里的最后一个值不能随意修改
|
|
__cache_data()
|
|
})
|
|
init_data = init_data || []
|
|
for (var i = 0; i < init_data.length; i++) {
|
|
addRow(init_data[i])
|
|
}
|
|
function __cache_data(){
|
|
var data_list = []
|
|
var trs = $(cid).find("tr")
|
|
for (var i = 0; i < trs.length; i++) {
|
|
var tds = $(trs[i]).find("td")
|
|
var data_line = []
|
|
for (var j = 0; j < tds.length; j++) {
|
|
var ipt = $(tds[j]).find("input")[0]
|
|
if (ipt){
|
|
data_line.push(ipt.value)
|
|
}
|
|
}
|
|
if (data_line.length){
|
|
data_list.push(data_line)
|
|
}
|
|
}
|
|
while(init_data.length){ init_data.pop() }
|
|
while(data_list.length){ init_data.unshift(data_list.pop()) }
|
|
callback(init_data)
|
|
}
|
|
function __add_remover(index){
|
|
$(cid).find("tr").eq(index).find("td").eq(opindex).remove();
|
|
var htmlStr = "<td><button>删除行</button></td>"
|
|
$(cid).find("tr").eq(index).append(htmlStr)
|
|
$(cid).find("tr").eq(index).find("td").find("button").click(function(){
|
|
removeRow(index)
|
|
})
|
|
}
|
|
function __add_changer(index){
|
|
var tds = $(cid).find("tr").eq(index).find("td")
|
|
for (var i = 0; i < tds.length; i++) {
|
|
var ipt = $(tds[i]).find("input")[0]
|
|
if (ipt){
|
|
$(ipt).on("input", function(){
|
|
__cache_data()
|
|
})
|
|
}
|
|
}
|
|
}
|
|
function addRow(data) {
|
|
var trArray = $(cid).find("tr");
|
|
var thisIndex = trArray.length - 1;
|
|
var addRowHtmlStr = "<tr>"
|
|
for (var i = 0; i < titlenames.length; i++) {
|
|
var [name, style, disabled] = titlenames[i].split('|')
|
|
style = style || 'width: 300px'
|
|
if (disabled == 'true'){
|
|
disabled = 'disabled="disabled" readonly="readonly"'
|
|
}else if (disabled == 'false' || disabled == '' || disabled === undefined){
|
|
disabled = ''
|
|
}else { throw Error('not in "true" or "false" string.') }
|
|
addRowHtmlStr += `<td style='width: 300px'><input type='text' style='${style}' ${disabled}></td>`
|
|
}
|
|
"<td></td></tr>"
|
|
$(trlast).before(addRowHtmlStr);
|
|
__add_changer(thisIndex)
|
|
__add_remover(thisIndex)
|
|
if (data){
|
|
var ctds = $(cid).find("tr").eq(thisIndex).find("td")
|
|
var leng = Math.min(data.length, titlenames.length)
|
|
for (var i = 0; i < leng; i++) {
|
|
$(ctds[i]).find('input').val(data[i])
|
|
}
|
|
}
|
|
}
|
|
function removeRow(index) {
|
|
$(cid).find("tr").eq(index).remove();
|
|
var trArrayNow = $(cid).find("tr");
|
|
for (var i = index; i < trArrayNow.length - 1; i++) {
|
|
__add_remover(i)
|
|
}
|
|
__cache_data()
|
|
}
|
|
}
|
|
|
|
chrome.storage.local.get(["response_changer"], function(res){
|
|
var init_data = JSON.parse(res["response_changer"] || "[]")
|
|
localStorage.webRedirect = JSON.stringify(init_data)
|
|
response_changer_init("response_changer", ["(URL)字符串匹配", "重定向地址或修改的字符串", "类型|width:120px|true"], init_data, function(data){
|
|
chrome.storage.local.set({
|
|
response_changer: JSON.stringify(data)
|
|
})
|
|
localStorage.webRedirect = JSON.stringify(data)
|
|
})
|
|
}) |