2013-05-13 3 views
1

У меня есть расширение для браузера, которое снимает снимок экрана с видимой страницы (используя API-интерфейс браузера).Javascript - определить, когда отражаются изменения стиля?

Пользователь инициирует процесс пользовательским контекстным меню, вводимым в веб-страницы.

wrapper.addEventListener("contextmenu", function(e) { 
    //prevent default context menu 
    e.preventDefault(); 
    menu.style.display = "block"; 
}); 

menu.addEventListener("click", function click(e) { 
    e.preventDefault(); 
    e.stopPropagation(); 
    //prevent the appearance of the menu in the screenshot 
    menu.style.display = "none"; 
    capture(); 
}, false); 

Проблема в том, что меню по-прежнему отображается на экране. Есть ли способ определить, когда отражаются изменения стиля?

Спасибо.

+0

Почему бы не использовать таблицу стилей печати и просто 'display: none' соответствующий элемент? –

+0

Элемент, который я скрываю, это контекстное меню, я меняю его между видимым/скрытым с помощью кода, потому что, как еще пользователь может щелкнуть по нему, если он уже скрыт. (т. Е. Я скрываю его только тогда, когда пользователь нажимает на него) –

+0

Возможный дубликат [Как заставить WebKit перерисовывать/перерисовывать для распространения изменений стиля?] (Http://stackoverflow.com/questions/3485365/how-can -i-force-webkit-to-redraw-repaint-to-spread-style-changes) или [Force DOM перерисовать/обновить Chrome/Mac] (http://stackoverflow.com/q/8840580/1048572)? – Bergi

ответ

0

я решил ее путем присоединения дополнительного слушателя к родительскому элементу (Незнайка, почему это работает, хотя)

wrapper.addEventListener("contextmenu", function(e) { 
    //prevent default context menu 
    e.preventDefault(); 
    menu.style.display = "block"; 
}); 

wrapper.addEventListener("mousedown", function(e) { 
    //can't use "display: none" before mouseup 
    menu.style.opacity = 0; 
}, false); 

menu.addEventListener("click", function click(e) { 
    e.preventDefault(); 
    e.stopPropagation(); 
    //prevent the appearance of the menu in the screenshot 
    menu.style.display = "none"; 
    capture(); 
}, false); 
0

Скорее всего положить вызов capture внутри setTimeout с соответствующей задержкой будет делать трюк для вас ,