2011-02-09 86 views
1

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

回答

0

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

您可以Application.GetResourceStream提取到的内容: -

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

注意开放的结构,你的类库的程序集名称,需要后面的文字“组件”。这会告诉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中定义的任何全局函数。

0

试着这么做:

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

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

+0

为此,我需要将我的js文件分别寄存在我的服务器中,然后在这里调用它? – Harish 2011-02-09 10:41:25

+0

您可以在服务器上的某个位置托管该脚本,并使用“WebClient”类对其进行异步加载,并在其回调中执行上述代码。但是你也可以在库中定义`myScriptCodeString`硬编码。硬编码脚本字符串并不是很好,但另一种选择是查看脚本对象功能[http://msdn.microsoft.com/en-us/library/cc645085(VS.95).aspx]如果这是你的情况的可能性。 – herzmeister 2011-02-09 10:50:33