Используйте chrome.runtime.getManifest(), чтобы получить все ваши объявления сценариев контента, вручную преобразуйте matches
и другие типы шаблонов в регулярные выражения и проверьте все URL-адреса вкладок браузера.
Это упрощенная версия, которая не учитывает исключенные URL-адреса.
var matches = [];
chrome.runtime.getManifest().content_scripts.forEach(function(cs) {
Array.prototype.push.apply(matches, (cs.matches || []).map(matchToRegexp));
Array.prototype.push.apply(matches, (cs.include_globs || []).map(globToRegexp));
function matchToRegexp(match) {
return match.replace(/[{}()\[\]\\.+?^$|]/g, "\\$&")
.replace(/\*/g, '.*?');
}
function globToRegexp(glob) {
return glob.replace(/[{}()\[\]\\.+^$|]/g, "\\$&")
.replace(/\?/g, '.')
.replace(/\*/g, '.*?');
}
});
var hasAllUrls = matches.indexOf('<all_urls>') >= 0 || matches.indexOf('*://*/*/') >= 0;
var rxMatches = hasAllUrls ? /^(https?|file|ftp):\/\/.+/
: new RegExp('^' + matches.join('$|^') + '$');
chrome.windows.getAll({
populate: true,
windowTypes: ['normal', 'panel', 'popup'],
}, function(windows) {
windows.forEach(function(window) {
window.tabs.forEach(function(tab) {
if (rxMatches.test(tab.url)) {
chrome.tabs.reload(tab.id);
}
});
});
});
Непрошеным. В случае проблем, отлаживайте его, исправьте, отредактируйте этот ответ.
См. this answer для более правильной функции преобразования glob-to-regexp.
[chrome.runtime.getManifest()] (https://developer.chrome.com/extensions/runtime#method-getManifest) + преобразование 'совпадений' в регулярные выражения (' * '->'. *? ') + ручное сравнение URL каждой вкладки. – wOxxOm
Не думаю, что прямой путь? Как насчет отправки сигнала с каждой вкладки (сценарий содержимого) и сохранения tabId в фоновом режиме, а затем обновить эти вкладки? –
'getManifest' будет делать! Если вы хотите отправить ответ в качестве ответа, я проверю его. –