Модификация сайтов с помощью дополнения Firefox

Я пишу надстройку Firefox, которая изменяет некоторые конкретные веб-сайты при их открытии. Но мне совсем не нравится API. Например, если я хочу добавить div-контейнер, содержащий кнопку на вкладке. Это будет выглядеть примерно так:

var myScript = 'document.body.innerHTML += "<div style=background-color:rgba(0,0,0,0.5);position:fixed;width:300px;height:300px;right:0px;top:0px;><input type=button value=test></input></div>";';
tab.attach({ contentScript: myScript });

Это:
1. Совершенно нечитабельно.
2. На многих сайтах будет выглядеть по-разному, потому что некоторые сайты добавляют стили по умолчанию ко всем элементам ввода.

Итак, есть ли более читаемый способ изменить сайт, который не требует добавления скрипта в виде строки?
И есть ли способ наложения какого-либо элемента на сайте (даже флэш)?

1 ответ

Решение

Вы должны использовать contentScriptFile,

И тогда вы должны использовать DOM API, которые не снижают производительность и "стреляют себе в ногу" (не .innerHTML), что-то вроде:

var div = document.createElement("div");
div.style.backgroundColor = "rgba(0,0,0,0.5)";
...
var input = document.createElement("input");
input.setAttribute("type", "button");
...
div.appendChild(input);
document.body.appendChild(div);

МДН имеет документацию.

Что касается стилей: этот жестче. Обычно люди не будут внедрять DOM-узлы в саму страницу (не только из-за совместимости CSS, но и во избежание конфликтов в Javascript и / или DOM), но вместо этого создают <iframe> который затем имеет свой собственный набор правил CSS и собственную среду Javascript и даже подчиняется той же политике происхождения, которая будет препятствовать веб-сайту портить содержимое, если все сделано правильно.

Другие вопросы по тегам