2011-02-09 1 views
1

Я пытаюсь создать библиотеку классов Silverlight, которая требует вызова нескольких методов Javascript. Я поместил эти методы в один файл .js и добавил его в проект. Но когда я пытаюсь вызвать любой из методов в файле js, я получаю ошибку FailedtoInvoke. Я понимаю, что эту проблему можно решить, добавив ссылку на файл JS в главном разделе ASPX или HTML-страницы. Но я разрабатываю библиотеку классов, и это невозможно. Кто-нибудь знает, как решить эту проблему? Я использую Silverlight 4 и Visual Studio 2010.Внедрение JS-файла в библиотеку классов Silverlight

ответ

0

Добавить файл .js в вашу библиотеку probject, как это звучит, вы сделали, убедитесь, что Build Action является «Resource».

Вы можете получить этот контент с Application.GetResourceStream: -

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

Примечания структуры Ури, имя сборки вашей библиотеки классов необходимо следуют буквальному «; компонент». Это говорит Silverlight искать ресурс внутри вашей DLL, который будет включен в Xap конечного приложения.

Теперь вам нужно, чтобы превратить содержание Stream имущества INfO в в строку: -

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

Наконец, вы можете привнести что JavaScript в текущей страницы: -

HtmlPage.Window.Eval(js); 

Thats это , любые глобальные функции, определенные в js, теперь могут быть вызваны с помощью HtmlPage.Window.Invoke.

+0

Спасибо большое! Это сработало! – Harish

0

Попробуйте что-то вроде:

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

Тогда методы, определенные в myScriptCodeString должны быть доступны.

+0

Для этого мне нужно разместить мой файл js на моем сервере отдельно, а затем вызвать его здесь правильно? – Harish

+0

Вы можете разместить этот скрипт где-то на сервере и загрузить его async с классом «WebClient» и выполнить вышеуказанный код в своем обратном вызове. Но вы также можете определить, что 'myScriptCodeString' жестко закодирован в вашей библиотеке. Строки с жестким кодом не так хороши, но еще один вариант - посмотреть на функциональность Scriptable Object [http://msdn.microsoft.com/en-us/library/cc645085(VS.95).aspx] если это возможность для вашего сценария. – herzmeister