关闭在WPF浏览器中运行的网页

本文关键字:运行 网页 浏览器 WPF | 更新日期: 2023-09-27 18:05:26

先介绍一下背景

我正在研究一个Web应用程序,它将在一个Web浏览器中运行,在一个WPF应用程序中。

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

现在来谈谈手头的问题

当用户关闭客户端(网页)时,浏览器应该捕获该事件并关闭作为子窗口的窗口。

我发现这个链接描述了我需要什么:WebBrowser和javascript窗口。close()

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

是否有一种方法来触发一个窗口关闭从客户端,气泡到WPF?

谢谢。

关闭在WPF浏览器中运行的网页

在使用WebBrowser.InvokeScriptWebBrowser.ObjectForScripting之前,我已经使用WebBrowser控件从JavaScript调用WPF应用程序中的方法

请参阅MSDN文章如何:实现DHTML代码和客户端应用程序代码之间的双向通信另请参阅这篇CodeProject文章,它似乎可以解决您的问题从托管在WebBrowser中的JavaScript调用c#方法

[ComVisible(true)]
    public class ScriptManager
    {
        // Variable to store the form of type Form1.
        private Window _window;
        // Constructor.
        public ScriptManager(Window window)
        {
            // Save the form so it can be referenced later.
            _window = window;
        }
        // This method can be called from JavaScript.
        public void MethodToCallFromScript()
        {
            // Call a method on the form.
            _window.Close();
        }
    }

from code behind of Window:

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();
    }
}

And in my Window (Loaded Event):

// Build browser
this.Browser = new WebBrowser();
this.Browser.Navigate(this.GetUri());
this.Browser.ObjectForScripting = new ScriptManager(this);

客户端Javascript然后执行:

$scope.Close = function() {
    window.external.CloseWindow();
}