来自我的Silverlight应用程序中的javascript的“未指定的错误”

时间:2011-08-18 19:27:01

标签: c# javascript asp.net silverlight

我有一个用C#编写的Silverlight应用程序,它使用Bing Maps SDK。在这个应用程序中,我有一个带有一些javascript函数的页面来公开应用程序中的函数。应用程序使用以下命令在MainPage的构造函数中注册Bing MapControl:

HtmlPage.RegisterScriptableObject("Page", new MapControl(this.BingMap)); 

在javascript函数中,我调用应用程序的方法如下:

<script type="text/javascript">
    function ClearMap() {
        var control = document.getElementById('silverlightControl');
        control.Content.Page.ClearMap();
    }
</script>

但是,每当我在javascript函数中引用control.Content.Page属性时,我都会收到“未指定的错误”。即使只是将其设置为变量也会导致错误,例如:

var page = control.Content.Page;

这是奇怪的部分。我正在使用其他2个应用程序的silverlight应用程序。一个是Windows服务,另一个是winform应用程序。 winform将可见的WebBrowser嵌入其表单中,并使用它来调用javascript函数。使用winform时,一切正常,没有错误。

仅在从Windows服务调用这些函数时才会出现此错误。该服务实例化WebBrowser对象,就像winform应用程序一样,并以相同的方式初始化所有内容。唯一的区别是它作为服务运行,WebBrowser不可见,也不以任何形式嵌入。这个事实可能导致这个错误吗?

我目前有winform应用程序,windows服务和silverlight应用程序的webservice都在我自己的本地机器上运行。

更新

在Gnostus的评论之后,我发现我遇到的主要问题是没有创建“Page”对象,因为在从基于Windows服务的WebBrowser导航到web服务后,App类永远不会被初始化。 winform应用程序和服务都以完全相同的方式执行此操作:

WebBrowser.DocumentCompleted += new WebBrowserDocumentCompletedEventHandler(WebBrowser_DocumentCompleted);
WebBrowser.Navigate("http://localhost:56062/BingMapsWebServiceTestPage.aspx");
while (WebBrowser.ReadyState != WebBrowserReadyState.Complete)
    System.Windows.Forms.Application.DoEvents();

我在MainPage的构造函数中添加了一些代码,它调用了HtmlPage.RegisterScriptableObject(“Page”,new MapControl(this.BingMap));当它被击中时会记录一些文本。当我在winform应用程序的WebBrowser中运行上面的代码时,会发生以下情况:

  1. DocumentCompleted事件被触发两次(一次由浏览器触发,我假设一次由silverlight控件)
  2. App()已初始化,并且“Page”元素已成功添加到MainPage的构造函数中
  3. 上述while循环完成
  4. 当我从Windows服务中执行相同操作时,它会执行#1和#3,但不执行#2。当我调用引用Page对象的javascript函数时,只有在它出错之后,才会触发第2步。

    更新2

    在一个新的winform应用程序中搞乱后,我发现只要WebBrowser或其父窗体不可见,就会在调用Navigate()时无法加载silverlight控件。我发现如果在Silverlight应用程序加载完成后隐藏了父窗体,那么仍然可以调用我的javascript函数。有没有人知道一个更好的方法来强制Silverlight应用程序除了闪烁可见的形式?甚至可以从Windows服务中显示表单,还是我不得不重新考虑作为控制台应用程序的整个事情?

0 个答案:

没有答案