問題タブ [jsm]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
1 に答える
293 参照

javascript - Firefox 拡張 JSM と名前空間の設定

そのため、Firefox 拡張機能では、拡張機能のオブジェクトを com.contoso.myExtension などのサブオブジェクトに配置することをお勧めします。そうすれば、グローバル名前空間にオブジェクトを配置せず、拡張機能は通常、お互いの髪の毛から離れます。(少なくとも一般的な browser.xul ウィンドウでは)

しかし、 Javascript コード モジュール (JSM)について私が理解していることは、モジュール自体が別の名前空間で動作している間、それがエクスポートするシンボルは、それをインポートするコードのグローバルな名前空間で終わるということです。さらに、エクステンションが「ナイス」であり、サブオブジェクトのみを構築しようとすることは不可能です。これらのエクスポートされたシンボルは、すでに存在するグローバル変数を攻撃するだけです。また、com.contoso.myExtension のようなシンボルをエクスポートすることはできません。これは単なるグローバル変数です。

では、JSM を使用するときに適切にプレイするためのプロトコルは何ですか? 非常に長い変数名を作成し、それらが衝突しないことを願っていますか?

0 投票する
1 に答える
377 参照

javascript - Javascriptモジュールに引数を渡す方法は?

Xulアプリケーションの単一ウィンドウでJavascriptモジュール(JSM)を使用したいので、必要に応じてリソースをロードできます。

しかし、ウィンドウをJSMに渡す必要があり、その方法がわかりません。私の試みに従います:

私のresource.jsmで:

私のウィンドウで呼び出す:

しかし、私は得る:

勝利は未定義です

resource.jsm内。

それを機能させる方法はありますか?

0 投票する
2 に答える
618 参照

javascript - Firefox 拡張機能がグローバル名前空間を汚染しないようにするための最善の方法は?

Firefox の拡張機能を開発する際に、グローバルな名前空間の汚染について調べていましたが、拡張機能ではできるだけ回避したいと考えています。いくつかの解決策がありますが、一般的に、解決策は拡張機能のグローバル変数を 1 つだけ宣言し、その中にすべてを入れることに集中しているようです。したがって、グローバル名前空間に変数を 1 つ追加するだけで済みますが、これはそれほど悪くはありません。

余談ですが、グローバル名前空間に余分な変数を入れないようにする解決策を提案してもらいました。すべてを関数にラップします。ここでの問題は、XUL オーバーレイで参照するものが何もないことです。オーバーレイで要素を宣言する必要があります。次に、JS で大量の s を追加して、XULaddEventListenerの のようなものを置き換えます。oncommand="..."私はこれをしたくありません。私は XUL 自体にイベントを含めることを絶対に望んでいます。oncommand="..."したがって、参照する XUL 属性用に少なくとも 1 つのグローバル変数が必要です。

したがって、コンセンサスは、拡張機能に 1 つ (そして 1 つだけ) の変数を持ち、すべてのコードをその中に入れることです。ここに問題があります。一般に、他の変数と衝突する可能性がほとんどないように、その変数には長くてユニークな名前を付けることをお勧めします。したがって、拡張機能の ID が の場合myextension@mycompany.com、変数myextensionAtMycompanyDotComに 、またはという名前を付けることができますcom.mycompany.myextension。これは、グローバル名前空間での衝突を回避するのに適していますが、問題が 1 つあります。その変数名は長くて扱いにくいです。私の XUL には、次のようなイベント ハンドラへの参照が散らばっています。oncommand="myextensionAtMycompanyDotCom.doSomeEvent". オーバーレイはブラウザー ウィンドウの DOM に追加されるだけなので、XUL オーバーレイでグローバル名前空間を参照する必要を回避する方法はありません。独自の名前空間を持たないため、拡張機能の変数スコープを独自のオーバーレイだけに制限することはできません。したがって、私が見ているように、4つの解決策があります。

1. XUL で長い変数名を使用するだけ

これにより、次のようなやや扱いにくく冗長な XUL コードが生成されます。

2. 短い変数名にランダム性の要素を追加する

拡張機能の短い変数名を思いつきます。myExtたとえば、myExtAX8T9. 次に、XUL には次のものがあります。

明らかに、ランダムな文字が奇妙に見え、ある種の一時変数のように見えるため、これはかなり見苦しく、混乱を招くコードになります。

3. グローバル変数を宣言しない

すべてを関数にまとめることができます。addEventListenerもちろん、これは XUL で参照するものが何もないことを意味するため、すべてのイベントを JavaScript コードで使用する XUL 要素に関連付ける必要があります。上記のように、大量の JS コードを検索してどのイベントがどの XUL 要素に関連付けられているかを見つけるよりも、XUL コードでイベントを参照する方がクリーンだと思うので、私はこの解決策が好きではありません。

4. XUL では短い変数名を使用する

拡張機能の variable を呼び出すだけで、次のmyExtような素敵な XUL コードを取得できます。

もちろん、この短い名前は、グローバル名前空間内の何かと競合する可能性がはるかに高いため、理想的ではありません。

それで、私は何かを逃しましたか?上記で提案した 4 つのソリューションに代わるものはありますか? そうでない場合、4 つのうちどれが最も優れているでしょうか (#3 は基本的に私には受け入れられないことを考えると)、その理由は何ですか?

0 投票する
1 に答える
3118 参照

lucene - ElasticSearch: カスタム アナライザー実装の構成

現在、従来の lucene ベースのアナライザー コンポーネントをエラスティック サーチ (0.19.18) に移行できるかどうか、およびその方法を評価しています。レガシー コードは lucene に基づいているため、アナライザーを es-plugin でラップしました。アナライザーの構成は、次の行のようになります。

ここまでは順調ですね。

正しくトークン化されたテキストを含むオブジェクトを返しますが、

トークン化されていないテキストを返します。明らかに、myAnalyzer の代わりに小文字のフィルターのみが適用されます。インデックス内のオブジェクトも正しく分析されていません。

インデックス マッピングは次のようになります (head-plugin からの出力)。

私はESを初めて使用するので、この動作の実際の理由がわかりません。アイデアを持っている人はいますか?

0 投票する
3 に答える
8292 参照

java - JavaのFileDescriptorからパスを取得します

私の問題に関する簡単な背景:

DomainTypeEnforcementの仕様をJavaSecurityManagerコードに変換するコンパイラを作成しています。一言で言えば、DTEは「タイプ」(オブジェクト)を定義し、それらのタイプにパスを割り当てます。次に、「ドメイン」(サブジェクト)を定義し、さまざまなタイプに対してドメインが持つ権限(rwxdc)を定義します。JSMでこの動作を可能な限りエミュレートする必要があります。

現在、書き込み権限に取り組んでいます。JSMのcheckWrite(String filename)メソッドを正常にオーバーライドしました。次のリストはcheckWrite(FileDescriptor filedescriptor)であり、これはより注意が必要です。DTEの定義方法により、書き込みアクションが許可されるかどうかを判断するためのパス情報が必要です。

  • FileDescriptorからパスデータを抽出することは可能ですか?いいえと思います-ドキュメントとさまざまなチュートリアルを確認しましたが、この情報を取得する方法があることを示唆するものは何も見つかりませんでした(ただし、間違って表示されることを嬉しく思います。私の仕事を簡単にします)。

  • 上記の答えが「いいえ」の場合、誰かが実行可能な回避策を提案できますか?たとえば、ネイティブコードを記述して、自分がやりたいことを実行し、これをカスタムJSMクラスに結び付ける方法はありますか?私はそのような「高度な」ことをするのは問題ありませんが、どのように始めるかについていくつかのアイデアが必要です。

  • または、基本的にFileDescriptorを使用するすべての書き込み権限を拒否する唯一のオプションですか?これは厄介な解決策なので避けたいのですが、それが現実である場合は知っておく必要があります。

お時間をいただき、誠にありがとうございます。

0 投票する
1 に答える
158 参照

firefox - ブラウザを再起動せずにFirefoxアドオンjsmモジュールコードを更新する

xpi、Firefox 拡張機能プロキシ ファイルではなく、ディレクトリから読み込まれる Firefox アドオンを開発しています。拡張機能は、jsm モジュールに基づいています。

これらのモジュールを更新してコードの変更を反映する方法はありますか? 現在それを行う唯一の方法は、ブラウザを閉じて再起動することですが、それは何かを開発するための正気な方法ではありません.

しようとしました:

しかし、変更は行われません。

0 投票する
1 に答える
241 参照

javascript - JavaScriptコードモジュール相互インポート【Firefoxアドオン】

Firefox アドオンに JavaScript コード モジュールを使用しているときに、この奇妙な動作に遭遇しました。これがバグなのか、相互インポートを行う悪い設計なのかはわかりません。

3 つのモジュール a、b、c があるとします。

a.js

b.js

c.js

a.init() は外部から呼び出されます。上記のコードで、b から 'c' の undefined をヒットしました。

いくつかのトラブルシューティングの後、これを修正するには、

  • a.js内のインポートを交換できます(bはcの前にインポートされます)
  • または、相互インポートを削除できます (c 内から b のインポートを削除します)。これらのいずれかを使用すると、うまくいきます。

私の実際のコードでは、 b と c はいくつかの UI 関連のものを表し、相互に依存しています。モジュールの相互インポートを完全に取り除き、そのうちの 1 つのコールバック関数を登録できます。しかし、この動作の原因を知りたいです。私が理解している限り、ドキュメントにはモジュール間のインポートに関する厳密なガイドラインはありません。また、モジュールのキャッシングにより、 1 つのモジュールを複数回インポートすると共有されることも認識しています。しかし、どういうわけかこれを説明することはできません。ここで何が間違っていますか?

0 投票する
1 に答える
141 参照

javascript - devtools モジュールを取得するアドオン SDK エラー

このコードを Addon-SDK アドオンに追加しています。

これは通常の(古いスタイルの)アドオンで機能しますが、次のcfx runようになります。

明確にするために、これらの 2 行をここに追加しようとしています: https://github.com/DavidBruant/usefulStackTrace/blob/master/lib/trackStack.js

これは、アドオン SDK の再起動不要のアドオン システム内では不可能ですか?

0 投票する
1 に答える
236 参照

firefox-addon - Firefox の JavaScript コード モジュールで createObjectURL を使用する

ブロブからコードをロードする JavaScript コード モジュールで Web ワーカーを使用したいと考えています。通常、これは Web ページで BLOB で「window.URL.createObjectURL」を呼び出し、createObjectURL によって生成された URL をワーカーに渡すことで実行できます。window.URL オブジェクトがないにもかかわらず、これは JavaScript コードモジュールで可能ですか?

0 投票する
2 に答える
1031 参照

javascript - Firefox 拡張機能で .jsm ファイルをインポートする (アドオン SDK を使用)

Firefox 拡張機能で「WebSocketServer.jsm」という .jsm ファイル (この githubから) をインポートしようとしています。以下の状況です。

  • .jsm ファイルは、次のパスの modules というディレクトリにあります。

root_of_extension/modules/WebSocketServer.jsm

  • chrome.manifest ファイルに次の行を追加しました。

resource external_components modules/

  • ファイルをインポートすることを推奨するコードをコードに挿入しました。

Cu.import("resource://external_components/WebSocketServer.jsm");

問題は、コンソールから次のエラーが表示されることです

「Cu.import」行の 6 行目。あなたはなにか考えはありますか?