Я создаю свое первое расширение 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": {
....
}
}