0

私は現在、ブラウザレスの JavaScript および TypeScript プログラムを実行するサーバー側アプリケーションを構築しています。私が現在使用している JavaScript エンジンは、Microsoft の JavaScript エンジン「Chakra」です (ただし、JavaScript.NET を使用すると、Google の V8 エンジンにより洗練された方法で接続できるため)。

C# と .NET 4.0 を使用してアプリケーションをプログラミングしています (今後は 4.5 に移行します)。

これまでのところ、たとえば、次のコマンドを実行すると、いくつかの問題に直面しました。

alert("Hello World");

「アラート」が定義されていないため、エラーが発生します。おそらくこれはブラウザに実装されています!(HTMLElement、XMLHttpRequest などの他のオブジェクトと同様)

私が知りたいのは、.NET (または他のマネージ/ネイティブ システム) からコードをマーシャリングする JavaScript コードを記述できるかどうかです。

例えば:

function alert(message) {
    //Performs call to .NET
    MessageBox.Show("Hello World");
}

ノート:

私はすでにここでいくつかの研究を行っています:

JavaScript エンジンを .NET に埋め込む

.NET アプリから Google の V8 エンジンを参照する

JVM および CLR との相互運用性に優れた Javascript エンジン

4

1 に答える 1

0

これにはいくつかの方法があります。Chakra は Windows の「アクティブ スクリプト エンジン」であり、多数の COM インターフェイスを実装して、対話型環境でスクリプト ファイルを実行できることを OS に通知できるようにします。

これにより可能になることの 1 つは、アプリケーションで COM (純粋に管理されている場合は相互運用機能) を使用し、ネイティブ オブジェクトをスクリプト環境に提供することです。これは、Windows スクリプト ホストが実行される方法であり、スクリプトを実行するために使用するときに、ホストするすべてのスクリプト エンジンに対して WSH クラスを有効にします。COMインターフェイスのリファレンスは MSDN にあります。IActiveScript::AddNamedItemを使用して、実行時にオブジェクトを実行中のスクリプトに公開できます。

ホストされた IE Web ブラウザー コントロールが JavaScript を介してネイティブ コードを呼び出せるようにするためにこれを行いましたが、COM の動作に慣れている必要があり、COM/interop のスキルが非常に鋭敏である必要があります。私の同僚の 1 人が、スクリプト/ホスト RPC を実現する簡単な方法を見つけたので、後から考えると、この作業の難しさに見合う価値はありませんでした (ブラウザー ccontrol のナビゲート イベントを監視することで、彼はカスタム リンクを作成し、プログラムでそれらをクリックすることができました)。次に、リンクの URL を使用して、実行するアクションを決定しました。かなりのハックですが、彼は 5 分ほどで起動して実行し、クラスをスクリプト ランタイムに公開するのに何時間も費やしました...)

于 2012-10-24T17:29:19.427 に答える