問題タブ [spidermonkey]

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 に答える
432 参照

spidermonkey - spidermonkeyエンジンでのJS_CANONICALIZE_NANの目的は何ですか?

JS_CANONICALIZE_NANの目的は何であり、すべてのプラットフォームで常に必要かどうか疑問に思います。

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

c++ - Spidermonkey埋め込みでjs-ctypesを提供するには?

概要

SpiderMonkey の「シェル」アプリケーションが ctypes JavaScript オブジェクトを作成するために使用するコードを調べましたが、C プログラマーの初心者ではありません。最新のビルド システムによって発せられる狂気のレベルはさまざまであるため、目的の機能を備えたプログラムを実際にリンクするコードやコマンドを追跡することはできないようです。


メソッド.狂気

The Mozilla Devs によるこの js-ctypes の実装は素晴らしい追加です。その構想以来、スクリプトは主に、より厳密で堅牢なアプリケーションを制御するために使用されてきました。SpiderMonkey プロジェクトに js-ctypes が登場したことで、JavaScript が立ち上がって、Microsoft の VB6 などのさまざまな由緒あるアプリケーション開発言語によって設定された「バー」の上を飛ぶ、本格的なオブジェクト指向の迅速なアプリケーション開発言語として数えられるようになりました。


はじめよう?

この構成で SpiderMonkey をビルドしました: ./configure --enable-ctypes --with-system-nspr

その後、make && make install の実行が成功します。

js シェルは正常に動作し、グローバルな ctypes javascript オブジェクトがそのシェルで動作することが確認されました。

JavaScript エンジンを埋め込む方法 -MDNの最初のソース リストから取得したコードを使用して、66 行目に次のコードを挿入して、JavaScript ctypes オブジェクトのインスタンス化を試みました。

私は次のようにコンパイルしました: g++ $(./js-config --cflags --libs) hello.cpp -o hello

コンパイルすると、いくつかの警告が表示されます。

しかし、アプリケーションを実行すると:


さらに

JS_InitCTypesClass は「dist/include/jsapi.h」で extern として宣言されていますが、関数は「ctypes/CTypes.cpp」にあり、独自のヘッダー「CTypes.h」を含み、「make」中に何らかのコマンドによってある時点でコンパイルされます。 './CTypes.o' を生成します。前に述べたように、私は C コードの初心者ではなく、ここで何をすべきかまったくわかりません。

js-ctypes オブジェクトを埋め込みで機能させる一般的な例を示してください。

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

spidermonkey - スパイダーモンキーTypeError

Linux上のCサーバー側アプリケーションにSpidermonkeyを統合することができました。javascriptからオブジェクトを作成しようとしています:

次のエラーが発生します。

[エラー]test.js:22:TypeError:obj.fooは関数ではありません

私はおそらく何かが欠けています...これがMyObjectの定義方法です:

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

javascript - SpiderMonkey で「chrome」コードを実行する

アプリケーションに Mozilla の SpiderMonkey を組み込み、v1.8.6 で導入された新しい Debugger APIを使用したいと考えています。ドキュメントから、この API は「コンテンツ コード」では利用できず、信頼できるいわゆる「クロム コード」でしか利用できないことを理解しています。今、私は「クロムコード」を実行する方法を理解しようとして多くのリソースを調べましたが、あまり成功していません. 私の推測では、信頼できるスクリプトは JS_EvaluateScriptForPrincipals で実行する必要がありますが、JSPrincipals の使用方法がわかりません...

どんな助けでも感謝します、ありがとう!

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

spidermonkey - JS_NewPropertyIterator と JS_Enumerate

JS_NewPropertyIterator() と JS_Enumerate() の違いは何ですか?
どちらも同じタスクを達成しているようです: オブジェクトの独自のプロパティを反復処理します。

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

javascript - スパイダーモンキーとガベージコレクション

C++アプリケーションにSpidermonkeyを埋め込んでいます。jsvalを渡すネイティブC++でいくつかのカスタムJavascript関数を実装する必要があります。偶発的なガベージコレクションからjsvalを保護する必要があります。私がこれを行うのは適切ですか?

(1)initルーチンの場合:

(2)Javascript関数setter()を実装する1つのc ++関数で:

(3)Javascript関数getter()を実装する同じコンパイルユニット内の2番目のC++関数呼び出しで:

私のJavascriptスクリプトは、次のような関数呼び出しを使用します。

静的jsvalvpは、2つの関数呼び出しの間に渡されるjsvalの永続的なストレージであるため、JS_RemoveRoot()を呼び出さないことに注意してください。そして、jsvalに格納されている以前のJSObjectがガベージコレクションに使用できると仮定して、setter()のgcルート静的変数vpに新しい値を設定し続けます。

関数呼び出しを介して渡すことができるgcルートの一時変数を作成するこれらの適切な方法はありますか?特に、setter()が以前のJSObjectを置き換える方法は、既存のJSObjectをgcで使用できるようにする(つまり、メモリリーク/クラッシュが発生しない)ための適切な方法です。

編集:ガベージコレクションが問題であると私が信じる理由は次のとおりです:

https://developer.mozilla.org/En/SpiderMonkey/JSAPI_User_Guide

セクションJSAPIの概念、Javascriptの値:

jsval自体は、ガベージコレクタからその指示対象を保護しません

https://developer.mozilla.org/en/SpiderMonkey_Garbage_Collection_Tips

例3は、「ルートを進むにつれて」と言い、jsvalをルートに割り当てる方法を示しています。

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

javascript - SpiderMonkey コンパイラのエントリ ポイントでのイベント ハンドラのセキュリティ プリンシパルの決定

現在、SpiderMonkey のnsJSContext::CompileEventHandler関数は、イベント ハンドラを null プリンシパルでコンパイルします。したがって、Spidermonkey のfrontend::CompileFunctionBody関数では、現在、プリンシパルをイベント ハンドラに関連付ける方法がありません。その後、イベント ハンドラ関数のプリンシパルはnsScriptSecurityManager::CheckFunctionAccessで決定されます。
私の質問は、イベント ハンドラーのセキュリティ プリンシパルをコンパイラのエントリ ポイントで検出できるかどうかです。この背後にある私の直感は次のとおりです。通常、イベント ハンドラーは DOM 要素に関連付けられ、そのプリンシパルはコンテナー ドキュメントです。イベント ハンドラーがコンテナー ドキュメントとは別のプリンシパルによって呼び出されるケースはありますか? 上記が当てはまる場合、イベント ハンドラーのプリンシパルは、frontend::CompileFunctionBody関数の「ファイル名」属性から判断できますか (たとえば、chrome:// URI はシステムを意味し、http:// uri はシステムではないことを意味します)。
(ところで、about: protocol ドキュメントのプリンシパルをどのように検出できますか?「システム」である場合もあれば、そうでない場合もあります)

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

javascript - クモザル:JS配列が長さ、スプライスなどのデフォルトのプロパティを継承しない理由

私は実際、クモザルのAPIとこのメーリングリストの両方を初めて使用します。実際、私はobjectA.arrayAのような配列を作成しようとしていましたが、コールバックコードは次のようになります。

objectA.arrayAの適切な値を取得していますが、objectA.arrayA.lengthを実行すると、arrayAにayプロパティがないと表示されます。私が間違っていることを教えてもらえますか。刺し傷を作っているときでも同じように直面しています。

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

shell - clear() 関数を呼び出すと、spidermonkey でセグメンテーション違反が発生するのはなぜですか?

少しの援助。debian (./configure、make、make install) で Spidermonkey をビルドしたところ、js シェルを実行して clear() 関数を呼び出すと、セグメンテーション エラーが発生します。これがなぜなのか、どこで助けが得られるのか、何か考えはありますか? これは誰かに起こりましたか?

$js
クリア() ;
セグメンテーション違反
$

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

javascript - 削除できないプロパティを定義していますか?

Spidermonkey 1.8 を使用する JSDB 1.8 でこれを行う場合:

私は and 行から取得しますが、 and and行trueから取得します。delete xdelete wfalsedelete ydelete zdelete v

この動作は ECMAscript 標準または Spidermonkey で定義されていますか? 特定のスコープから関数を削除したかったのですが、できないことがわかりました。