1

Firefox OS のホーム画面用のウィジェットを作成しています。B2G ではウィジェットを別のアプリケーションとして分離し、ホームスクリーンでは、ウィジェットのコンテンツを iframe にロードします。別のドメインからのものであるため、ドメインを変更してそれらが等しくなるようにしますが、イベント ハンドラーを登録すると、まだ機能しません。

(widget は iframe オブジェクト、foo は関数です。) widget.contentWindow.oncontextmenu = foo;

「contextmenu」イベントに応答してハンドラーがまだ呼び出されていません。

しかし、ウィジェットモジュールをホームスクリーンモジュールに入れて一つのWebアプリにすると正常に動作します。

4

1 に答える 1

3

contentWindow は、クロスオリジンではアクセスできません。別のアプリには別の起源があります。

mozbrowser iframe をホームスクリーン アプリに追加した場合、その iframe の URL からウィジェットをロードし、iframe で mozbrowsercontextmenu イベントをリッスンできます。

<iframe id="widget" mozbrowser=true></iframe>

var widget = document.getElementById('widget');
widget.addEventListener('mozbrowsercontextmenu', eventHandler);

contextmenu イベントを処理する方法の例については、ブラウザー アプリを参照してください https://github.com/mozilla-b2g/gaia/blob/master/apps/browser/js/browser.js#L1021

これには、ホームスクリーン アプリに「ブラウザ」権限を追加する必要があります。

アプリとしてロードする場合は、iframe にも mozapp 属性が必要で、アプリのマニフェストを指す必要があります。これは、システム アプリのウィンドウ マネージャーがアプリを iframe に埋め込む方法です。

于 2012-11-13T13:58:19.857 に答える