如何解决我的WPF应用程序和托管的IExplorer之间的通信?

时间:2010-01-21 12:34:39

标签: wpf architecture

对于一个相当大的项目,我必须弄清楚如何(如果可能的话)来解决这个问题。我有一个全屏WPF应用程序进行幻灯片放映 - 按照例如每张幻灯片20秒。现在,我必须研究用URL替换幻灯片的可能性,并让用户导航幻灯片而不是每10秒更换一次幻灯片。设置如下:

  1. 首先定时播放幻灯片,例如5张幻灯片
  2. 我显示我的网页,让用户与网站互动(导航)
  3. 当用户“做某事(这是问题)”时,网站会从“幻灯片”中删除,原来的幻灯片会重新开始
  4. 显示的容器是一个WPF UserControl,其中包含一个事件,允许它更改为下一张幻灯片(调用Next()方法)。 IExporer托管在此控件中。

    我面临的问题是:我如何从我的托管应用程序必须调用NExt()方法的网站进行通信?

    显示该网站的IExplorer托管在我的WPF UserControl中。有什么方法可以访问某种事件或其他任何东西,以帮助我确定是否已按下特定页面或特定链接??

    Web服务,光盘上的文件,您的名字,我准备尝试任何事情: - )

    任何建议或可能的解决方案表示赞赏。

1 个答案:

答案 0 :(得分:1)

如果在WPF应用程序中使用WebBrowser控件,则可以使用html中的javascript调用C#类。例如,假设您有一个类似于以下的类:

[ComVisible(true)]
public class JavaScriptBackEnd
{
    public void onclick(string s)
    {
        MessageBox.Show(s);
    }
}

然后使用以下代码初始化WebBrowser控件:

private void Window_Loaded(object sender, RoutedEventArgs e)
{
    webBrowser1.ObjectForScripting = new JavaScriptBackEnd();
    webBrowser1.Navigate(new Uri(@"HTMLPage1.htm"));
}

从HTMLPage1.htm您现在可以使用以下javascript调用JavaScriptBackEnd.onclick方法:

function testclick() {
    window.external.onclick('blabla');
}