Как остановить chrome внедрение одного и того же скрипта при каждом клике при использовании chrome .tabs.executeScript - PullRequest
0 голосов
/ 20 февраля 2020

Я создаю свое первое расширение basi c chrome, которое при щелчке мыши берет URL текущей вкладки, открывает новую страницу по другому адресу (всегда тот же URL) и отправляет скопированный URL в это.

У меня это работает, но для 1 вопроса. Каждый раз, когда пользователь нажимает на расширение, он внедряет скрипт. Поэтому, если они нажимают на расширение второй раз для той же вкладки, он открывает 2 вкладки, новые вкладки, затем 3 вкладки при третьем щелчке и т. Д.

Я думал, что решил это с помощью это решение , но теперь то, что происходит, когда пользователь щелкает расширение для данной вкладки, он открывает его только один раз, даже после 2, 3, 4 щелчков (что хорошо), но если пользователь переключается на другое вкладка и щелкает расширение, ничего не происходит.

Я могу отчасти понять, почему это происходит, я думаю, теперь он устанавливает флаг для всех вкладок, поэтому, как только скрипт внедряется во вкладку, независимо от того, какая вкладка, флаг установлен и любые будущие попытки внедрения заблокированы. Я пытаюсь выяснить, как установить флаг только для вкладки, на которую нажали, а не для всех вкладок?

В конечном счете, я просто хочу, чтобы пользователь мог щелкнуть расширение, и оно откроется. 1 вкладка за клик.

Это мой код

background. js

// Do this when the browser extension icon is clicked
chrome.browserAction.onClicked.addListener(tab => {
    // inject content.js into activeTab

    if (window.qqq !== true) {
        window.qqq = true;
        chrome.tabs.executeScript(tab.id, {
            file: "content.js"
        });
    }

    // Message the active tab to say the extension button has been clicked
    chrome.tabs.query({ active: true, currentWindow: true }, function(tabs) {
        let activeTab = tabs[0];
        chrome.tabs.sendMessage(activeTab.id, {
            message: "add_url_clicked",
        });
    });
});

// Listen for a URL and when received, open the app and append the requested
// URL using HTTP GET
chrome.runtime.onMessage.addListener(request => {
    if (request.message === "open_links_app_with_new_url") {
        chrome.tabs.create({
            url: request.app + "/?url=" + request.destination
        });
    }
});

content. js

// Listen for a browser click and when received, open a new tab with the url created below
chrome.runtime.onMessage.addListener(request => {
    if (request.message === "add_url_clicked") {
        // Get URL to send to app
        let destination = window.location.href;

        localStorage.setItem('url', destination);
        chrome.runtime.sendMessage({
            message: "open_links_app_with_new_url",
            app: "https://destination_url",
            destination: destination
        });
    }
});

и если это поможет, манифест. json

{
    "name": "Links",
    "manifest_version": 2,
    "version": "0.2",
    "description": "etc",
    "browser_action": {
        "default_icon": {
         ....
        }
    },
    "permissions": ["activeTab"],
    "background": {
        "scripts": ["background.js"]
    },
    "icons": {
         ....
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...