Я работаю над простым обзором браузера с помощью XULRunner 1.9.2.
<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="chrome://global/skin/"?>
<window
xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
xmlns:html="http://www.w3.org/1999/xhtml">
<hbox equalsize="always" flex="2">
<browser flex="1" type="content-primary"/>
<html:canvas flex="1"/>
</hbox>
</window>
Я написал несколько Javascript, который обрабатывает MozAfterPaint
события из <browser>
, толкает их к<canvas>
с drawWindow
, а затем делает немного магии.Все это работает довольно хорошо.(Ну, полосы прокрутки и курсоры немного шаткие, но я могу их игнорировать.)
Я действительно хочу, чтобы холст был единственным видимым элементом, но я могу взаимодействовать только с элементом браузера прямо сейчас.
То, что у меня было частичным успехом:
Захват событий на <canvas>
и повторное внедрение их в <browser>
.
Я могуиспользуйте clientX
и clientY
каждого события на холсте, найдите соответствующий document.elementFromPoint(x, y)
в браузере и createEvent
initEvent
dispatchEvent
соответственно.
Однако это работает толькохорошо для key(down/press/up)
, click
и mouse(down/move/up)
.Я не вижу, как разумно синтезировать mouse(over/out)
события, и DOMMouseScroll
здесь не срабатывает, поэтому я не могу захватить события колеса прокрутки.
То, что у меня былобезуспешно с:
Укладка холста над браузером.
<stack flex="2">
<browser flex="1" type="content-primary"/>
<html:canvas flex="1"/>
</stack>
Для этого требуется какой-то способ пропустить события через холст и вместо браузера,который я еще не пробовал, потому что есть более насущная проблема:
Даже если холст должен быть размещен над браузером, браузер виден над холстом.
Сложите браузер над холстом, делая его прозрачным.
<stack flex="2">
<html:canvas flex="1"/>
<browser flex="1" type="content-primary" style="opacity: 0;"/>
</stack>
Теоретически, мне вообще не придется связываться с событиями.Однако настройка opacity
, похоже, не приносит никакой пользы, и снова браузер по-прежнему перекрывает холст.
Как скрыть браузер, но при этом разрешить нормальное взаимодействие с нимэто?
(я не против написания нативного кода, и ответы WebKit тоже хороши. Но, насколько я могу судить, ни Gecko, ни WebKit не имеют API-интерфейсов рендеринга за пределами экрана, и естьнет эквивалентов WebKit MozAfterPaint
и drawWindow
.)