Встраивание файла JS в библиотеку классов Silverlight - PullRequest
1 голос
/ 09 февраля 2011

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

Ответы [ 2 ]

0 голосов
/ 09 февраля 2011

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

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

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

Обратите внимание на структуру Uri, необходимо имя сборки вашей библиотеки классов, за которой следует литерал "; component".Это заставляет Silverlight искать внутри вашей библиотеки ресурс, который будет включен в Xap конечного приложения.

Теперь вам нужно преобразовать содержимое свойства Stream информации в строку: -

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

Наконец, вы можете добавить этот javascript на текущую страницу с помощью: -

HtmlPage.Window.Eval(js);

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

0 голосов
/ 09 февраля 2011

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

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

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

...