84 lines
3.0 KiB
JavaScript
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`;
|
|
}
|