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>
MozAfterPaint
からのイベントを処理し、それらをwith<browser>
にプッシュし、いくつかの魔法を実行する Javascript を作成しました。それはすべてかなりうまく機能します。(まあ、スクロールバーとカーソルはちょっと不安定ですが、無視できます。)<canvas>
drawWindow
キャンバスを唯一の可視要素にしたいのですが、今のところブラウザ要素しか操作できません。
私が部分的に成功したこと:
でイベントをキャプチャし、
<canvas>
に再注入します<browser>
。各イベントの
clientX
andをキャンバスに使用し、ブラウザで対応するものを検索し、適切に行うことができます。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
。)