Silverlight是微软开发的浏览器插件技术,允许在网页中运行.NET应用程序。与JavaScript交互是Silverlight应用常见的需求,因为需要与宿主网页进行通信。
这是最直接的方式,通过Silverlight的System.Windows.Browser
命名空间提供的API:
using System.Windows.Browser;
// 调用无参数JavaScript函数
HtmlPage.Window.Invoke("jsFunctionName");
// 调用带参数的JavaScript函数
HtmlPage.Window.Invoke("jsFunctionName", "param1", 123, true);
可以获取对JavaScript对象的引用并进行更复杂的交互:
ScriptObject jsObject = HtmlPage.Window.GetProperty("jsObject") as ScriptObject;
jsObject.Invoke("methodName", arg1, arg2);
原因:可能在Silverlight加载前JavaScript函数还未定义,或函数名拼写错误。
解决方案:
try {
HtmlPage.Window.Invoke("jsFunction");
} catch (Exception ex) {
// 处理错误
}
原因:Silverlight应用和宿主页面不同源时会有安全限制。
解决方案:
原因:Silverlight和JavaScript类型系统不完全兼容。
解决方案:
var data = new { Name = "Test", Value = 123 };
HtmlPage.Window.Invoke("jsFunction", JsonConvert.SerializeObject(data));
if (!HtmlPage.IsEnabled)
{
throw new Exception("This application requires browser scripting support.");
}
public interface IJavaScriptInvoker
{
void ShowMessage(string message);
}
public class JavaScriptInvoker : IJavaScriptInvoker
{
public void ShowMessage(string message)
{
HtmlPage.Window.Invoke("showMessage", message);
}
}