doufire 前端
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 

55 lines
2.0 KiB

chrome.runtime.onMessage.addListener(function(request, sender, sendResponse) {
console.log('收到消息:', request);
if (request.action === 'checkOnlineStatus') {
const isDouyin = window.location.hostname.includes('douyin.com');
sendResponse({isDouyin: isDouyin});
} else if (request.action === 'checkViewers') {
const viewersCounts = [];
const liveRooms = document.querySelectorAll('[data-e2e="user-card"]');
liveRooms.forEach(room => {
const viewersElement = room.querySelector('[data-e2e="watch-count"]');
if (viewersElement) {
const viewersText = viewersElement.textContent.trim();
const viewers = parseViewersCount(viewersText);
const roomTitle = room.querySelector('[data-e2e="video-title"]')?.textContent.trim() || '未知直播间';
viewersCounts.push({ room: roomTitle, viewers: viewers });
}
});
sendResponse({viewersCounts: viewersCounts});
} else if (request.action === 'getCurrentRoomId') {
try {
const url = window.location.href;
const match = url.match(/live\.douyin\.com\/([^/?]+)/);
if (match && match[1]) {
sendResponse({ roomId: match[1] });
} else {
const roomIdElement = document.querySelector('[data-room-id]');
if (roomIdElement) {
sendResponse({ roomId: roomIdElement.getAttribute('data-room-id') });
} else {
sendResponse({ error: '未找到直播间ID' });
}
}
} catch (error) {
console.error('获取直播间ID时出错:', error);
sendResponse({ error: error.message });
}
return true; // 保持消息通道开启
}
return true; // 保持消息通道开放
});
function parseViewersCount(viewersText) {
const number = parseFloat(viewersText.replace(/[^0-9.]/g, ''));
const unit = viewersText.replace(/[0-9.]/g, '').trim();
switch(unit) {
case '万':
return number * 10000;
case '亿':
return number * 100000000;
default:
return number;
}
}
console.log('内容脚本已加载');