Замена строки запроса, если она уже существует, с использованием JavaScript в расширении Google Chrome - PullRequest
0 голосов
/ 27 января 2020

Я написал расширение Chrome, чтобы при нажатии кнопки к текущей ссылке добавлялась правильная строка запроса. Например: '? Wcmmode = edit'.

Работает до некоторой степени, однако добавляет множители, как показано на скриншоте, если сильный запрос уже существует, и он нажимается снова или одна из трех других строк запроса clicked.

У меня есть четыре кнопки, добавляющие очень похожую строку запроса, как показано ниже, но они не должны добавляться как вторая строка запроса с '&'. Сначала они должны очистить предыдущее.

Пример изображения

// Disabled Mode
function handler_one() {
    chrome.tabs.query({
        currentWindow: true,
        active: true
    }, function(tab) {
        const customParam = 'wcmmode=disabled';
        const url = tab[0].url
        const hashStart = (url.indexOf('#') === -1) ? url.length : url.indexOf('#');
        const querySymbol = (url.indexOf('?') === -1) ? '?' : '&';
        const newUrl = url.substring(0, hashStart) + querySymbol + customParam + url.substring(hashStart);
        chrome.tabs.update(undefined, {
            url: newUrl
        });
    });
};
// WCM Mode Edit
function handler_two() {
    chrome.tabs.query({
        currentWindow: true,
        active: true
    }, function(tab) {
        const customParam = 'wcmmode=edit';
        const url = tab[0].url
        const hashStart = (url.indexOf('#') === -1) ? url.length : url.indexOf('#');
        const querySymbol = (url.indexOf('?') === -1) ? '?' : '&';
        const newUrl = url.substring(0, hashStart) + querySymbol + customParam + url.substring(hashStart);
        chrome.tabs.update(undefined, {
            url: newUrl
        });
    });
};
// WCM Mode Design
function handler_three() {
    chrome.tabs.query({
        currentWindow: true,
        active: true
    }, function(tab) {
        const customParam = 'wcmmode=design';
        const url = tab[0].url
        const hashStart = (url.indexOf('#') === -1) ? url.length : url.indexOf('#');
        const querySymbol = (url.indexOf('?') === -1) ? '?' : '&';
        const newUrl = url.substring(0, hashStart) + querySymbol + customParam + url.substring(hashStart);
        chrome.tabs.update(undefined, {
            url: newUrl
        });
    });
};
// WCM Mode Preview
function handler_four() {
    chrome.tabs.query({
        currentWindow: true,
        active: true
    }, function(tab) {
        const customParam = 'wcmmode=preview';
        const url = tab[0].url
        const hashStart = (url.indexOf('#') === -1) ? url.length : url.indexOf('#');
        const querySymbol = (url.indexOf('?') === -1) ? '?' : '&';
        const newUrl = url.substring(0, hashStart) + querySymbol + customParam + url.substring(hashStart);
        chrome.tabs.update(undefined, {
            url: newUrl
        });
    });
};

1 Ответ

0 голосов
/ 28 января 2020

проверьте, существует ли строка перед добавлением.

if ( url.indexOf(customParam) > 0 ) ...

или

if ( url.searchParams.get(customParam) ) { 
    alert('already exists'); 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...