在多專案環境中,我們常會:
若能讓 extension 自動根據專案 URL 或設定檔,幫忙加上 prefix,不但可節省時間,也能維持團隊命名一致性。
在 manifest.json 註冊一組新的 content script
{
"content_scripts": [
...,
{
"matches": ["https://gitlab.com/*/merge_requests/new*"],
"js": ["content_prefix.js"]
}
]
}
說明:僅在「新建 MR 頁面」注入,避免干擾其他頁面
content_prefix.js 主要邏輯
const PREFIX_MAP = {
'frontend': '[FE]',
'backend': '[BE]',
'api': '[API]'
};
// 取得專案代號(例如從 URL)
function getProjectKey() {
const url = window.location.href;
const beforeDash = url.split('/-/')[0];
const parts = beforeDash.split('/');
return parts.pop() || '';
}
//如果沒有取得專案名稱則使用預設值
const projectKey = getProjectKey();
const prefix = PREFIX_MAP[projectKey] || `[${projectKey.toUpperCase()}]`;
// 偵測 MR 標題輸入框
const titleInput = document.querySelector('input[name="merge_request[title]"]');
if (titleInput) {
const applyPrefix = () => {
const value = titleInput.value.trim();
if (!value.startsWith(prefix)) {
titleInput.value = `${prefix} ${value}`;
}
};
// 使用者手動輸入時自動補上 prefix
titleInput.addEventListener('blur', applyPrefix);
// 初始時也執行一次
applyPrefix();
} else {
console.warn('未找到 MR 標題欄位,可能是 GitLab UI 延遲渲染。');
}
說明:
進階 — background 傳設定值(Optional)
若希望 prefix 可由使用者自訂,可以讓 popup 頁面設定各專案的 prefix,並透過 message passing 傳給 content script。
// popup.html
chrome.storage.sync.set({
prefixes: {
'frontend': '[FE]',
'backend': '[BE]'
}
});
// content_prefix.js
chrome.storage.sync.get('prefixes', ({ prefixes }) => {
const projectKey = getProjectKey();
const prefix = prefixes[projectKey] || `[${projectKey.toUpperCase()}]`;
applyPrefix(prefix);
});