peji-inspektor-crx/content.js
2024-12-15 18:40:40 +00:00

114 lines
2.8 KiB
JavaScript

class MessagingService {
async GetHyperlinkNodes(sender, callback) {
const a = this;
const nodes = await document.querySelectorAll("a");
let result = [];
for (let i=0; i<nodes.length; i++) {
result.push({
innerText: nodes[i].innerText ?? "",
innerHTML: a.#encodeHtml(nodes[i].innerHTML),
href: (nodes[i].getAttribute("href") ?? "").trim(),
title: (nodes[i].getAttribute("title") ?? "").trim(),
target: nodes[i].getAttribute("target") ?? "",
rel: nodes[i].getAttribute("rel") ?? "",
type: nodes[i].getAttribute("type") ?? "",
occurrence: 1
});
}
await callback(result);
}
async GetImageNodes(sender, callback) {
const a = this;
const nodes = await document.querySelectorAll("img");
let result = [];
for (let i=0; i<nodes.length; i++) {
result.push({
src: (nodes[i].getAttribute("src") ?? ""),
alt: (nodes[i].getAttribute("alt") ?? ""),
srcset: nodes[i].getAttribute("srcset") ?? "",
usemap: nodes[i].getAttribute("usemap") ?? "",
width: nodes[i].getAttribute("width") ?? "",
height: nodes[i].getAttribute("height") ?? "",
occurrence: 1
});
}
await callback(result);
}
async GetLocation(sender, callback) {
callback(document.location.href);
}
async GetMetaNodes(sender, callback) {
const a = this;
const nodes = await document.querySelectorAll("meta");
let result = [];
for (let i=0; i<nodes.length; i++) {
result.push({
content: (nodes[i].getAttribute("content") ?? ""),
name: (nodes[i].getAttribute("name") ?? ""),
httpEquiv: (nodes[i].getAttribute("http-equiv") ?? ""),
occurrence: 1
});
}
await callback(result);
}
async GetScriptNodes(sender, callback) {
const a = this;
const nodes = await document.querySelectorAll("script");
let result = [];
for (let i=0; i<nodes.length; i++) {
result.push({
src: (nodes[i].getAttribute("src") ?? ""),
type: (nodes[i].getAttribute("type") ?? ""),
occurrence: 1
});
}
await callback(result);
}
#encodeHtml(htmlContent) {
const map = {
"&": "&amp;",
"<": "&lt;",
">": "&gt;",
'"': "&quot;",
"'": "&#39;",
};
let result = (htmlContent ?? "").replace("\r", "").replace("\n", "\\n").replace("\t", "\\t");
result = result.replace(/[&<>"']/g, (char) => map[char]);
return result;
}
}
const messageService = new MessagingService();
chrome.runtime.onMessage.addListener(async function(request, sender, callback) {
if (typeof(messageService[request.event]) == "undefined") {
return;
}
await messageService[request.event](sender, callback);
});