Я пытался решить эту проблему целую вечность, но пока не повезло.
Что я хочу сделать, так это то, что при нажатии на значок расширения будет произведена проверка. Если эта проверка не удалась, я хочу, чтобы всплывающее окно отображалось, иначе скрыть Затем при каждом последующем щелчке по значку расширений проверка запускается повторно, чтобы определить, прошла ли текущая вкладка проверку или нет.
Первый щелчок работает нормально, но последующие щелчки необходимо щелкнуть дважды, прежде чем они вступят в силу.
Вот что у меня сейчас есть:
background.js:
// Stop the popup displaying on first load
chrome.browserAction.setPopup({popup: ""});
// Check whether the main.css can load, if not the setup the popup.html to display
chrome.tabs.executeScript (null, {file: "main.css"}, function() {
if (chrome.runtime.lastError) {
// The file couldn't be loaded to display the popup
chrome.browserAction.setPopup({popup: 'popup.html'});
}
});
chrome.browserAction.onClicked.addListener(function(tab) {
chrome.tabs.executeScript (null, {file: "main.js"}, function() {
if (chrome.runtime.lastError) {
var errorMsg = chrome.runtime.lastError.message
console.log('Error occurred... ' + errorMsg);
// Show the popup as there has been an error
chrome.browserAction.setPopup({popup: 'popup.html'});
}
else
{
// Everything loaded ok so now load the css file too
console.log('All ok...');
// Stop the popup appearing
chrome.browserAction.setPopup({popup: ""});
chrome.tabs.insertCSS(null, {file: "main.css"});
}
});
});
popup.js:
chrome.browserAction.setPopup({popup: ""});
// Run this within popup so the a bespoke message can be displayed and that the popup can be made to work in the same way as the chrome.browserAction.onClicked event in background.js
// This is because 'onClicked' event does not fire if the browser action has a popup: https://developer.chrome.com/extensions/browserAction#event-onClicked
chrome.tabs.executeScript (null, {file: "main.js"}, function() {
if (chrome.runtime.lastError) {
var aErrorMessage = chrome.runtime.lastError.message
chrome.browserAction.setPopup({popup: 'popup.html'});
// Create a div to put the Error Message in
var aErrorMessageContainer = document.createElement('div');
aErrorMessageContainer.setAttribute('id', 'errormsg-container');
document.body.appendChild(aErrorMessageContainer);
// Create a paragraph to place the error message text in
var aErrorMessagePara = document.createElement('p');
aErrorMessagePara.setAttribute('id', 'error-message');
aErrorMessagePara.innerHTML = '<hr/><b>Chrome Error Message:</b><br /> <i>' + aErrorMessage + '</i>';
aErrorMessageContainer.appendChild(aErrorMessagePara);
}
else
{
chrome.browserAction.setPopup({popup: ""});
chrome.tabs.insertCSS(null, {file: "main.css"});
}
});
Проблема здесь в том, что я пытаюсь настроить отображение или скрытие всплывающего окна в событии 'chrome.browserAction.onClicked'.
Часть в верхней части background.js хорошо работает при принятии решения о том, следует ли изначально показывать или скрывать всплывающее окно, поэтому проблем там нет.
Но если пользователь находится на вкладке, которая не прошла тест chrome.tabs.executeScript в событии onClicked в background.js, а затем пользователь переходит на другую вкладку в браузере, которая не вызывает ошибку 'chrome.tabs.executeScript' тест, они должны дважды щелкнуть, чтобы увидеть результаты.
Я думаю, это потому, что хотя значение всплывающего окна устанавливается в событии Click, ничего не меняется, пока пользователь не щелкнет значок расширения во второй раз.
Надеюсь, это имеет смысл!
Любая помощь будет высоко ценится.