2

创建一个单独的 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\");");
        }
    }
4

1 回答 1

0

您不是 XAP 也从“ http://www.visionwww.com/ ”获得服务。因此,当您尝试使用它进行操作时,Invoke出于安全原因,该尝试会被阻止。

于 2010-05-11T20:02:29.023 回答