Webページのhtmlボタンを使用して、拡張機能で宣言されたJavascript関数を呼び出す方法は?
ボタンが入ったhtmlページがあります。ユーザーがボタンをクリックすると、自分のFirefox拡張機能内ですでに宣言した関数が呼び出されます。
Webページのhtmlボタンを使用して、拡張機能で宣言されたJavascript関数を呼び出す方法は?
ボタンが入ったhtmlページがあります。ユーザーがボタンをクリックすると、自分のFirefox拡張機能内ですでに宣言した関数が呼び出されます。
Web ページを制御するのはユーザーなので、目的を達成するための最も簡単で安全な方法は、Web ページでカスタム DOM イベントをディスパッチし、拡張コードでリッスンすることです。
私が書いた拡張機能の例を次に示します。これはhttp://mozilla.doslash.org/cw/を正確に実行します(最新の Firefox バージョンには更新されていませんが、クリーンで簡単に更新できるはずです)。
Firefox 拡張機能は、HTML ページとは異なる Javascript コンテキストで実行されるため、拡張機能を HTML ページの Javascript から直接呼び出すことはできません。
ただし、HTML からのアクセスを許可するように拡張機能を設計できます。通常、HTML Javascript は Component オブジェクトへのアクセスを許可されていないため、HTML コードが拡張機能内のオブジェクトにアクセスできるようにする必要があります。これを行うには、拡張機能で XPCOM コンポーネントを作成し、nsICategoryManager オブジェクトを介して「JavaScript グローバル プロパティ」カテゴリにオブジェクトを設定します。エントリ名は非特権 Javascript から使用される文字列で、値は XPCOM クラスのコントラクト ID です。
ただし、オブジェクトへの非特権 Javascript アクセスを許可する必要もあります。そうしないと、スクリプト セキュリティ マネージャーがアクセスをブロックします。これを可能にするには、nsISecurityCheckedComponent を実装します - canCreateWrapper (nsIIDPtr iid 内)、canCallMethod (nsIIDPtr iid 内、wstring methodName 内)、canGetProperty (nsIIDPtr iid 内、wstring propertyName 内)、および canSetProperty (nsIIDPtr iid 内、wstring propertyName 内) を提供して、allAccess を返します。許可されたプロパティの場合は noAccess 、それ以外の場合は noAccess です。
ユーザー入力の取り扱い、およびアクセスを許可する対象に注意してください。これを行うと、ブラウザーに誤ってセキュリティ ホールを作成するのは非常に簡単です。
これを、ローカル ファイルにアクセスしようとする JavaScript 関数の先頭に配置してみてください。
netscape.security.PrivilegeManager.enablePrivilege('UniversalXPConnect');
これにより、ユーザーは、コードがローカル ファイル システムにアクセスできるようにするかどうかを選択できます。