-1

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>

    各イベントのclientXandをキャンバスに使用し、ブラウザで対応するものを検索し、適切に行うことができます。clientYdocument.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。)

4

1 に答える 1

0

思い出したように、mousethrough="always"属性を使用してこれを行うことができますが、要素自体に直接設定できるかどうかはわかりません。その<canvas>ため、何らかのボックス内にラップする必要がある場合があります。それ以外の場合は、XULRunner 1.9.2 を使用しているため、pointer-events: none;を信じています。代わりに CSS プロパティを使用できます。

于 2011-02-22T22:07:44.233 に答える