Да, можно запретить повторное открытие вкладки в расширении для Chrome и переключиться на уже открытую вкладку с определённым URL. Чтобы реализовать это в вашем расширении, вам нужно использовать API `chrome.tabs`. Вот примерный алгоритм, который вам может помочь:
1. **Проверка открытых вкладок:** При нажатии на кнопку, проверьте, существует ли уже вкладка с нужным URL.
2. **Переключение на вкладку:** Если вкладка найдена, просто переключитесь на неё. Если нет, откройте новую вкладку.
Вот пример кода на JavaScript для вашего расширения:
```javascript
// Пример функции, которую можно вызывать при нажатии на кнопку
function openOrSwitchTab(url) {
chrome.tabs.query({}, function(tabs) {
let foundTab = null;
// Ищем вкладку с указанным URL
for (let tab of tabs) {
if (tab.url === url) {
foundTab = tab;
break;
}
}
if (foundTab) {
// Переключаемся на уже открытую вкладку
chrome.tabs.update(foundTab.id, { active: true });
} else {
// Открываем новую вкладку
chrome.tabs.create({ url: url });
}
});
}
// Пример использования функции
document.getElementById("myButton").addEventListener("click", () => {
openOrSwitchTab("https://example.com");
});
```
### Объяснение кода:
1. **`chrome.tabs.query({})`**: Этот метод получает все открытые вкладки.
2. **Цикл for**: Мы проходим по всем вкладкам и сравниваем их URL.
3. **`chrome.tabs.update(foundTab.id, { active: true })`**: Если вкладка с нужным URL найдена, мы переключаемся на неё.
4. **`chrome.tabs.create({ url: url })`**: Если вкладка не найдена, мы создаём новую вкладку с указанным URL.
### Как использовать:
1. Добавьте этот код в скрипт вашего расширения.
2. Убедитесь, что у вас есть соответствующие разрешения в `manifest.json`:
```json
{
"manifest_version": 3,
"name": "My Extension",
"version": "1.0",
"permissions": ["tabs"],
"background": {
"service_worker": "background.js"
}
}
```
С помощью этого кода вы сможете предотвратить открытие дублирующихся вкладок для вашего указанного URL. Если у вас есть локальный URL, он будет работать так же, если вы его укажете.