Javascript 关闭在WPF WebBrowser中运行的网页

Javascript 关闭在WPF WebBrowser中运行的网页,javascript,c#,.net,wpf,Javascript,C#,.net,Wpf,首先是一点背景知识 我正在开发一个Web应用程序,它将在WebBrowser和WPF应用程序中运行 当我们逐渐将功能转移到web应用程序时,这是暂时的需要。只要还没有完成,就仍然需要WPF客户机。最终,WPF客户端将完全淘汰 现在开始处理手头的问题 当用户关闭客户端(网页)时,webbrowser应捕获该事件,并关闭其子窗口 我发现这个链接描述了我需要什么: 唉,我不认为这里描述的答案仍然有效,因为甚至不可能执行window.close(),因为我不是打开正在运行的窗口的人。从那时起,浏览器(理

首先是一点背景知识

我正在开发一个Web应用程序,它将在WebBrowser和WPF应用程序中运行

当我们逐渐将功能转移到web应用程序时,这是暂时的需要。只要还没有完成,就仍然需要WPF客户机。最终,WPF客户端将完全淘汰

现在开始处理手头的问题

当用户关闭客户端(网页)时,webbrowser应捕获该事件,并关闭其子窗口

我发现这个链接描述了我需要什么:

唉,我不认为这里描述的答案仍然有效,因为甚至不可能执行window.close(),因为我不是打开正在运行的窗口的人。从那时起,浏览器(理所当然地)加强了安全性

问题

有没有一种方法可以从客户端触发一个窗口关闭,从而冒泡到WPF


谢谢。

在使用
WebBrowser.InvokeScript
WebBrowser.ObjectForScripting

请参阅此MSDN文章 另请参阅这篇CodeProject文章,它似乎可以解决您的问题

从窗口的代码隐藏:

webBrowser1.ObjectForScripting = new ScriptManager(this);
这很有效,谢谢

我做了以下工作:

[ComVisible(true)]
public class ScriptManager
{
    protected Window Window { get; set; }

    public ScriptManager(Window window)
    {
        this.Window = window;
    }

    public void CloseWindow()
    {
        this.Window.Close();
    }
}
在我的窗口中(已加载事件):

然后,客户端Javascript执行以下操作:

$scope.Close = function() {
    window.external.CloseWindow();
}
// Build browser
this.Browser = new WebBrowser();
this.Browser.Navigate(this.GetUri());
this.Browser.ObjectForScripting = new ScriptManager(this);
$scope.Close = function() {
    window.external.CloseWindow();
}