SearchTrademark/final1/background.js

84 lines
3.0 KiB
JavaScript

// background.js (Service Worker)
// 1) 확장 프로그램 설치/업데이트 시 컨텍스트 메뉴 생성
chrome.runtime.onInstalled.addListener(() => {
chrome.contextMenus.create({
id: "searchTrademark",
title: "지재권 검색",
contexts: ["selection"] // 텍스트를 드래그 선택한 상태에서만 메뉴 표시
});
// (선택) 서비스 워커 keep-alive
chrome.alarms.create("keepAlive", { periodInMinutes: 4 });
});
chrome.alarms.onAlarm.addListener((alarm) => {
if (alarm.name === "keepAlive") {
console.log("[background.js] 서비스 워커 유지 알람 실행됨");
}
});
// 2) 컨텍스트 메뉴 클릭 시 처리
chrome.contextMenus.onClicked.addListener((info, tab) => {
if (info.menuItemId === "searchTrademark") {
// 선택된 텍스트(드래그된 내용)
const keyword = info.selectionText.trim();
if (!keyword) return;
console.log("[background.js] 컨텍스트 메뉴 검색 키워드:", keyword);
// MarkInfo 검색 URL (키워드 검색 예시)
const url = buildMarkInfoUrl(keyword);
// fetch로 마크인포 요청
fetch(url)
.then((resp) => {
if (!resp.ok) {
throw new Error(`네트워크 오류: ${resp.status}`);
}
return resp.text();
})
.then((html) => {
// __NUXT_DATA__ 추출 (정규표현식 예시)
const match = /<script[^>]*id="__NUXT_DATA__"[^>]*>([\s\S]*?)<\/script>/i.exec(html);
if (!match) {
throw new Error("__NUXT_DATA__ 태그를 찾을 수 없습니다.");
}
const jsonString = match[1];
const globalData = JSON.parse(jsonString);
// 예: globalData 배열 중 첫 번째 아이템이 주요 정보라고 가정
let firstItem = null;
if (Array.isArray(globalData) && globalData.length > 0) {
firstItem = globalData[0];
}
// 노티피케이션에 표시할 문자열 생성
let msg = "";
if (firstItem && typeof firstItem === "object") {
// 예: applicationNum, trademarkName 등 필요한 필드만 추출
const applicationNum = firstItem.applicationNum || "(출원번호 없음)";
const trademarkName = firstItem.trademarkName || "(상표명 없음)";
msg = `출원번호: ${applicationNum}\n상표명: ${trademarkName}`;
} else {
// globalData 전체 중 일부만 표시
msg = JSON.stringify(globalData).slice(0, 80) + "...";
}
// 알림 표시
chrome.notifications.create({
type: "basic",
iconUrl: "icon.png",
title: "지재권 검색 결과",
message: `검색 키워드: ${keyword}\n결과: ${msg}`
});
});
}
});
// 3) URL 생성 함수
function buildMarkInfoUrl(keyword) {
const encoded = encodeURIComponent(keyword);
return `https://markinfo.kr/search?page=1&size=20&sort=_score,desc&sort=applicationDate,desc&searchType=ST01&searchKeyword=${encoded}&statuses=APPLICATION&statuses=PUBLICATION&statuses=REGISTRATION`;
}