Я создаю пользовательский указатель и избегаю страшного «дрожащего» эффекта, так как пользовательский стиль редактирует стили страницы после того, как страница закончила рендеринг. Я пытаюсь сделать это, пока страница по-прежнему загружается.Добавление элемента стиля до того, как целевая страница закончила загрузку
Делая это, вставив правил в заранее существующий объект типа работает, как ожидалось ....
http://pastebin.com/NNjLjKA5 ... ждать, пока объект стиля не существует, то добавить новый стиль к нему.
Однако при попытке создать новый объект стиля для вставки правил в Я испытываю странное поведение ...
// ==UserScript==
// @name script
// @include *
// @run-at document-start
// ==/UserScript==
// Add style rules while page is loading (to prevent jumping)
function addStyleRules(){
// Check if stylesheets exist yet, if not try again in a bit
if(!document.styleSheets[0]) return setTimeout(addStyleRules,1);
// Get/create stylesheet element (if not already created)
if(!document.querySelector('style[title=new_stylesheet]')){
var css = document.createElement('style');
css.type = "text/css";
document.head.appendChild(css);
css.title = 'new_stylesheet';
}
// Get stylesheet object
var ss;
for(i in document.styleSheets)
if(document.styleSheets[i].title == 'new_stylesheet')
ss = document.styleSheets[i];
// Add style rules
if(ss.addRule)
ss.addRule('*','background-color:black',0);
else
ss.insertRule('*{background-color:black}',0);
//debug
console.log('page loading', ss, new Date().getTime());
}
addStyleRules();
// Page has finished loading
document.addEventListener('DOMContentLoaded',function(e){
// Get stylesheet object
var ss;
for(i in document.styleSheets)
if(document.styleSheets[i].title == 'new_stylesheet')
ss = document.styleSheets[i];
//debug
console.log('page loaded', ss, new Date().getTime());
});
Этот сценарий должен создать новый элемент стиля, найти новый style в документе document.styleSheets, а затем применить новое правило.
Кажется, что это прекрасно, что наблюдается при первом событии журнала. Однако, как только страница закончила загрузку, новый объект стиля больше не существует (хотя элемент стиля присутствует в DOM).
Так что да, мой вопрос ...
Что происходит с вновь созданным объектом таблицы стилей между ними он создается, имея новое правило успешно применяется, и событие «DOMContentLoaded» стрельба?
- Браузер Chrome 16.0.912.77