2009-03-26 12 views
5

C#プログラムでJavascriptをホストしたいと思います。ユーザーがカスタムJavaScriptコードを作成し、C#プログラムでその関数を実行させ、ユーザーが自分のフレームワークコードを使用できるようにしたいと考えています。C#とJavascriptを相互運用するにはどうすればよいですか?

これは可能ですか?もしそうなら、どうですか?

編集:私はではありません。このプロジェクトにはASP.NETを使用しています。

+0

これはWebページからのものでも、winformからのものでもかまいませんか? – RossFabricant

+0

理想的には、インターフェイスに関係なく動作するはずです... –

+0

[この質問を見る](http://stackoverflow.com/questions/268320/execute-a-javascript-function-in-a-c-application) –

答えて

3

また、Webブラウザコントロールを使用して、HTMLドキュメント内でjavascriptをホストし、COM可視クラスを作成し、そのインスタンスをObjectForScriptingプロパティに設定する2つの間で対話できます。

「外部」クラスのパブリックメンバーは、javascriptのwindow.externalからアクセスできるようになりました。また、マネージコード側から、ドキュメントのInvokeScriptメソッドを使用して、任意のjavascript関数を呼び出すことができます。

このように、2つのオブジェクト間で複雑なオブジェクトを渡すのは簡単です。

私はこのアイデアをこのGoogle Earthアプリケーションでかなり使いました。 http://fraserchapman.blogspot.com/2008/08/google-earth-plug-in-and-c.html

+0

ああ、優秀!私の以前のグーグルでは、ウェブブラウザーコントロールアプローチを提案している人が見つかりましたが、説明は提供されませんでした。ありがとう=) –

+0

また、この例をチェックすると、実行時にJavaScriptを注入する機能を含む、もっと複雑なやりとりを見ることができます。ソースのIHTMLScriptElement.csを参照してください。 http://code.google.com/p/winforms-geplugin-control-library/ - Fraser – Fraser

1

Spidermonkey .NETおそらくあなたが探しているものでしょうか。

私はそれがどのように発展したのか分かりません。 butsは基本的に私がたくさん好むMozilla's Spidermonkey Javascriptパーサーエンジンのポートです。あなたはそれをdirectly

0

を評価することができます

それともあなたは確かにC#のからネイティブJavascriptを実行することができます - スタータ用this articleを参照してください。 Javascriptにあなたのフレームワークをアクセスさせることは、やっかいかもしれません。おそらくScript#がお手伝いできますか?

+0

スクリプト#はJSを書くのに役立ちますが、JSから.NETコードを呼び出すのに役立つとは思いません。 – bdd

0

JavaScriptを埋め込むことができるHTMLコンポーネントがあります。他の方法では、適切なことはASP.NET Webサービスです。おそらくスマートなクライアントでは、両方を組み合わせることができます。

2

Microsoft Dynamic Langauage Runtime (DLR)をお勧めします。人生の目的は.Net環境でのスクリプト作成を容易にすることです。 DLRはスクリプト特有のものではないので、時間の経過とともにより多くのスクリプト言語が構築されますが、私が知っているものはIronRuby、IronPython、JScriptです。

+0

私はこのルートに行くかもしれませんが、私は言語としてJavaScriptが好きです。 JavaScriptのDLR実装があれば本当にうれしいですが、今まで私はその空間で何も見ていませんでした。 –

+0

以前は、Microsoft.Scriptingライブラリの初期サンプルにはJScriptサンプルが含まれていました。私はそれがもはや維持されていないことを読んだ。 – sipwiz

+0

はい、DLRとタイプダイナミックを使用しますが、ブラウザコントロールでJSを最初にホストし、COM可視クラスを作成する必要があります。一旦それが行われると、DLRはドット構文などを使用することができ、リフレクションと呼び出しで心配する必要がないので、interopを簡単にします。しかし、DLRはJSを実行しません。はるかに簡単にそれをIOにするだけです。 – Fraser

1

これを行う方法は、JScriptまたはVBScriptのいずれかをホストすることを許可したWindowsスクリプトホストでした。

関連する問題