add inject code

This commit is contained in:
go0p
2024-05-07 22:53:11 +08:00
parent 5424078d38
commit fbe662c056
2 changed files with 104 additions and 35 deletions
+45 -34
View File
@@ -8,41 +8,52 @@ const websocketManager = new WebSocketManager();
chrome.runtime.onMessage.addListener(function (msg, sender, sendResponse) {
console.log("msg", msg)
if (msg.action === ActionType.CONNECT) {
console.info("Start to connect websocket")
const host = msg['host'] || "127.0.0.1"
const port = msg['port'] || 11212
websocketManager.connectWebsocket(`ws://${host}:${port}/?token=${"a"}`)
} else if (msg.action === ActionType.DISCONNECT) {
websocketManager.disconnectWebsocket()
} else if (msg.action === ActionType.SETPROXY) {
chrome.proxy.settings.set({
value: {
mode: "fixed_servers",
rules: {
singleProxy: {
scheme: msg.scheme,
host: msg.host,
port: parseInt(`${msg.port}`)
switch (msg.action) {
case ActionType.CONNECT:
console.info("Start to connect websocket")
const host = msg['host'] || "127.0.0.1"
const port = msg['port'] || 11212
websocketManager.connectWebsocket(`ws://${host}:${port}/?token=${"a"}`)
break;
case ActionType.DISCONNECT:
websocketManager.disconnectWebsocket();
break;
case ActionType.SETPROXY:
chrome.proxy.settings.set({
value: {
mode: "fixed_servers",
rules: {
singleProxy: {
scheme: msg.scheme,
host: msg.host,
port: parseInt(`${msg.port}`)
}
}
},
scope: 'regular',
});
break;
case ActionType.CLEARPROXY:
chrome.proxy.settings.clear({})
break;
case ActionType.PROXYSTATUS:
chrome.proxy.settings.get({}, function (details) {
if (details.value && details.value.mode === "fixed_servers") {
let proxyConfig = details.value.rules.singleProxy;
chrome.runtime.sendMessage({
enable: true,
proxy: `${proxyConfig.scheme}://${proxyConfig.host}:${proxyConfig.port}`
})
} else {
chrome.runtime.sendMessage({enable: false, proxy: ""})
}
},
scope: 'regular',
})
} else if (msg.action === ActionType.CLEARPROXY) {
chrome.proxy.settings.clear({})
} else if (msg.action === ActionType.PROXYSTATUS) {
chrome.proxy.settings.get({}, function (details) {
if (details.value && details.value.mode === "fixed_servers") {
let proxyConfig = details.value.rules.singleProxy;
chrome.runtime.sendMessage({
enable: true,
proxy: `${proxyConfig.scheme}://${proxyConfig.host}:${proxyConfig.port}`
})
} else {
chrome.runtime.sendMessage({enable: false, proxy: ""})
}
});
});
break;
}
})
chrome.tabs.query({}, (tabs) => {
tabs.forEach(function (tab) {
console.log("Tab ID",tab.id); // 输出每个标签页的ID
});
});
+59 -1
View File
@@ -22,6 +22,10 @@ export class WebSocketManager {
this.startHeartbeat();
};
this.socket.onmessage = (event) => {
this.handleMessage(event.data);
};
this.socket.onclose = () => {
chrome.runtime.sendMessage({action: ActionType.STATUS, connected: false});
};
@@ -69,4 +73,58 @@ export class WebSocketManager {
isConnected() {
return this.socket && this.socket.readyState === WebSocket.OPEN;
}
}
handleMessage(message) {
console.log("message", message)
// 解析消息
try {
// 解析从WebSocket接收到的JSON数据
let code = message;
getTabId().then((tabId) => {
// 确保tabId和code有效
if (typeof tabId === 'number' && typeof code === 'string') {
// 在指定的tabId上执行脚本
chrome.scripting.executeScript({
target: {tabId: tabId},
// function: getTitle,
function: log,
args: [code]
}, (injectionResults) => {
// 处理脚本执行的结果,如日志记录等
console.log('Script executed:', injectionResults);
});
} else {
console.error('Received malformed message:', message);
}
});
} catch (err) {
console.error('Error parsing message from WebSocket:', err);
}
}
}
function getTitle() {
return document.title;
}
function log(message) {
return console.log(message);
}
function getTabId() {
return new Promise((resolve, reject) => {
chrome.tabs.query({active: true, currentWindow: true}, (tabs) => {
if (tabs.length) {
resolve(tabs[0].id);
} else {
reject('No active tab found');
}
});
});
}
// chrome.tabs.query({}, (tabs) => {
// tabs.forEach(function (tab) {
// console.log(tab.id); // 输出每个标签页的ID
// });
// })