У меня есть библиотечный скрипт, который используется несколькими скриптами пользователя.Эта библиотека выполняет некоторые тяжелые работы (т. Е. Операции с интенсивным использованием процессора), поэтому я хотел бы, чтобы работал только 1 экземпляр этой библиотеки.
Вот минимальный пример:
lib.js
let callbacks = [];
document.addEventListener('click', function(event){
// pretend that something expensive happens in here
for (callback of callbacks)
callback();
});
script1.user.js
// @match foo.bar
// @require lib.js
callbacks.push(function(){
console.log('Script 1: '+callbacks.length+' callback(s) registered');
});
script2.user.js
// @match foo.bar
// @require lib.js
callbacks.push(function(){
console.log('Script 2: '+callbacks.length+' callback(s) registered');
});
При такой настройке вывод после щелчка мыши будет выглядеть следующим образом:
Script 1: 1 callback(s) registered
Script 2: 1 callback(s) registered
, поскольку каждый пользовательский скрипт имеет свой собственный экземпляр библиотеки.Что я могу сделать, чтобы они использовали один и тот же экземпляр библиотеки, поэтому я получаю вывод, подобный следующему:
Script 1: 2 callback(s) registered
Script 2: 2 callback(s) registered
Примечание:
- Оба пользовательских скрипта запускаются на одной странице
- Пользовательские скрипты могут иметь или не иметь
@grant none