在Silverlight类库中嵌入JS文件

时间:2011-02-09 09:53:46

标签: javascript silverlight silverlight-4.0 class-library

我正在尝试创建一个需要调用一些Javascript方法的Silverlight类库。我已将这些方法放在单个.js文件中并将其添加到项目中。但是当我尝试调用js文件中的任何方法时,我收到FailedtoInvoke错误。我知道这个问题可以通过在ASPX或HTML页面的head部分添加JS文件的引用来解决。但我正在开发一个类库,所以这是不可能的。有人知道如何解决这个问题吗?我正在使用Silverlight 4和Visual Studio 2010.

2 个答案:

答案 0 :(得分:0)

尝试类似:

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

然后myScriptCodeString中定义的方法应该可用。

答案 1 :(得分:0)

将.js文件添加到库中,因为它听起来已经完成,请确保它的构建操作是“资源”。

您可以使用Application.GetResourceStream检索此内容: -

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

请注意Uri的结构,需要类库的程序集名称,后跟文字“; component”。这告诉Silverlight在你的dll中查找将包含在最终应用程序的Xap中的资源。

现在您需要将信息的Stream属性的内容转换为字符串: -

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

最后,您可以使用以下命令将javascript注入当前页面: -

HtmlPage.Window.Eval(js);

多数民众赞成,现在可以用HtmlPage.Window.Invoke调用js中定义的任何全局函数。