2011-02-09 11 views
1

いくつかのJavascriptメソッドを呼び出す必要があるSilverlightクラスライブラリを作成しようとしています。これらのメソッドを単一の.jsファイルに入れてプロジェクトに追加しました。しかし、jsファイルのメソッドのいずれかを呼び出そうとすると、FailedtoInvokeエラーが発生します。この問題は、ASPファイルまたはHTMLページのheadセクションにJSファイルのリファレンスを追加することで解決できることを理解しています。しかし、私はクラスライブラリを開発しているので不可能です。誰かがこの問題に取り組む方法を知っていますか?その後myScriptCodeStringで定義された方法が利用可能であるべきSilverlightクラスライブラリにJSファイルを埋め込む

string myScriptCodeString = GetScriptCodeStringFromSomewhere(); 
System.Windows.Browser.HtmlPage.Window.Eval(myScriptCodeString); 

:私は2010年

答えて

0

.jsファイルをライブラリの問題に追加します。これは、ビルドアクションが「リソース」であることを確認してください。

あなたはApplication.GetResourceStreamで、このコンテンツを検索することができます。 - リテラルが続く

StreamResourceInfo sriJS = Application.GetResourceStream(new Uri("YourAssemblyName;component/MyStuff.js", UriKind.Relative)); 

注ウリ、あなたのクラスライブラリのアセンブリ名の構造が必要とされている「;コンポーネント」。これはSilverlightに、最終的なアプリケーションのXapに含まれるdll内のリソースを探すように指示します。

今、あなたは文字列に情報のStreamプロパティの内容を有効にする必要があります: - :これだけ

HtmlPage.Window.Eval(js); 

-

StreamReader reader = new StreamReader(sriJS.Stream, System.Text.Encoding.UTF8); 
string js = reader.ReadToEnd(); 

最後にあなたがして、現在のページにそのJavaScriptを注入することができjsで定義されているグローバル関数は、HtmlPage.Window.Invokeで呼び出すことができます。

+0

ありがとうたくさんの男!出来た! – Harish

0

のようなものを試してみてのSilverlight 4とVisual Studioを使用しています。

+0

これが機能するには、私のサーバーでjsファイルを別にホストし、ここでそれを正しく呼び出す必要がありますか? – Harish

+0

このスクリプトをサーバーのどこかにホストし、 'WebClient'クラスでasyncをロードし、そのコードをコールバックで実行することができます。しかし、あなたのライブラリに 'myScriptCodeString'がハードコードされていると定義することもできます。しかし、ハードコードされたスクリプト文字列はそれほど素晴らしいものではありません。したがって、もう1つの選択肢は、Scriptable Object機能[http://msdn.microsoft.com/en-us/library/cc645085(VS.95).aspx]を見ることです。それがあなたのシナリオの可能性ならば。 – herzmeister

関連する問題