fix(qrcode): 修复图片右键菜单功能描述和检测逻辑
- 修改菜单标题为「解析图片二维码」更准确 - 改进 isImageUrl 函数,支持更多图片URL格式 - 支持 data:image/ 格式 - 支持URL路径中包含图片相关关键词 - 更新国际化文案和测试用例
This commit is contained in:
@@ -617,7 +617,7 @@
|
|||||||
"description": "Translation key: qrCode_resultPlaceholder"
|
"description": "Translation key: qrCode_resultPlaceholder"
|
||||||
},
|
},
|
||||||
"qrCode_imageToQr": {
|
"qrCode_imageToQr": {
|
||||||
"message": "图片转二维码",
|
"message": "解析图片二维码",
|
||||||
"description": "Translation key: qrCode_imageToQr"
|
"description": "Translation key: qrCode_imageToQr"
|
||||||
},
|
},
|
||||||
"rightClickRestorer_loading": {
|
"rightClickRestorer_loading": {
|
||||||
|
|||||||
@@ -27,9 +27,26 @@ function isUrl(text: string): boolean {
|
|||||||
|
|
||||||
/** 检测URL是否为图片格式 */
|
/** 检测URL是否为图片格式 */
|
||||||
function isImageUrl(url: string): boolean {
|
function isImageUrl(url: string): boolean {
|
||||||
|
const trimmedUrl = url.trim().toLowerCase();
|
||||||
|
|
||||||
|
// 检查是否为 data:image 格式
|
||||||
|
if (trimmedUrl.startsWith('data:image/')) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查是否包含图片扩展名
|
||||||
const imageExtensions = ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.webp', '.svg', '.ico'];
|
const imageExtensions = ['.jpg', '.jpeg', '.png', '.gif', '.bmp', '.webp', '.svg', '.ico'];
|
||||||
const lowerUrl = url.toLowerCase();
|
if (imageExtensions.some((ext) => trimmedUrl.includes(ext))) {
|
||||||
return imageExtensions.some((ext) => lowerUrl.includes(ext));
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
// 检查URL路径中是否包含图片相关关键词
|
||||||
|
const imageKeywords = ['/image/', '/img/', '/photo/', '/pic/', '/upload/'];
|
||||||
|
if (imageKeywords.some((keyword) => trimmedUrl.includes(keyword))) {
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
/** 生成二维码的核心逻辑 */
|
/** 生成二维码的核心逻辑 */
|
||||||
|
|||||||
@@ -50,7 +50,7 @@ describe('contextMenu', () => {
|
|||||||
);
|
);
|
||||||
expect(imageMenus).toHaveLength(1);
|
expect(imageMenus).toHaveLength(1);
|
||||||
expect(imageMenus[0].id).toBe('qrCode-image');
|
expect(imageMenus[0].id).toBe('qrCode-image');
|
||||||
expect(imageMenus[0].title).toBe('🖼️ 图片转二维码');
|
expect(imageMenus[0].title).toBe('🖼️ 解析图片二维码');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -80,7 +80,7 @@ export const CONTEXT_MENU_CONFIGS: ContextMenuItemConfig[] = [
|
|||||||
},
|
},
|
||||||
{
|
{
|
||||||
id: 'qrCode-image',
|
id: 'qrCode-image',
|
||||||
title: '🖼️ 图片转二维码',
|
title: '🖼️ 解析图片二维码',
|
||||||
contexts: [chrome.contextMenus.ContextType.IMAGE],
|
contexts: [chrome.contextMenus.ContextType.IMAGE],
|
||||||
parentId: PARENT_MENU_ID,
|
parentId: PARENT_MENU_ID,
|
||||||
},
|
},
|
||||||
|
|||||||
Reference in New Issue
Block a user