创建一个单独的 PopupWindow 以打开另一个 Web 浏览器会给我一个 HtmlWindow 对象作为返回值,该对象与 silverlight 项目的静态“HtmlPage.Window”的对象类型相同。该对象类型提供“Invoke”和“Eval”方法。
我想评估一个 javascript,它可以位于我的 Silverlight 代码中的字符串值 (Eval) 或我弹出的 uri (Invoke) 中。
我使用的 Nomather 脚本执行方法,它失败了。对于 eval,它给了我一个带有“Eval failed”的 InvalidOperationException。信息。对于 Invoke,它给了我一个 InvalidOperationException 和“调用失败:TalkToJavaScript”。信息。
有没有办法在 PopupWindow 上执行 javascript。
这里的代码是一个简单的测试。我第一次按下按钮时,它会在新的 webbrowser 实例中弹出 uri。我第二次单击时,它会尝试在目标 uri 窗口上执行 javascript。它在 ** "m_window.Invoke("TalkToJavaScript", "pute");" 处失败
html代码
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<script type="text/javascript">
function TalkToJavaScript(data) {
alert("Message received from Silverlight: " + data);
}
</script>
</head>
<body>
<div id="content" />
</body>
</html>
Silverlight 代码
private void Button_Click(object sender, System.Windows.RoutedEventArgs e)
{
if (m_window == null)
{
HtmlPopupWindowOptions options = new HtmlPopupWindowOptions();
options.Left = 0;
options.Top = 0;
options.Width = 800;
options.Height = 600;
m_window = HtmlPage.PopupWindow(new Uri("http://www.visionwww.com/tests/ContentInjectionTest.html"),
"new", options);
}
else
{
m_window.Invoke("TalkToJavaScript", "test");
//m_window.Eval("alert(\"Message received from Silverlight\");");
}
}