Наиболее распространенной причиной конфликтов расширений является использование общих имен в общем пространстве имен. Например, если два расширения определяют глобальную переменную с именем «log» в оверлее browser.xul, только одно из них будет работать должным образом, так как другое «log» будет перезаписано.
Распространенным решением является выяснение того, какие из ваших идентификаторов будут сброшены в общее пространство, и префиксы к ним с вашим собственным уникальным префиксом.
Для кода JavaScript вы можете (и в любом случае это хорошая идея) поместить свой код в объект:
var myExtension = {
onLoad: function() { ... },
...
}
вместо
function onLoad() {
}
Вот довольно хорошая статья по теме: http://blog.userstyles.org/2007/02/06/avoiding-extension-conflicts/.
Другие конфликты редки и должны быть отлажены в каждом конкретном случае. Например, раньше в Mozilla была ошибка, из-за которой слушатели событий на узле терялись при перемещении узла по DOM. Это вызвало многочисленные конфликты для расширения «Редактор меню», которое позволило пользователю переставлять пункты меню.