关闭在WPF WebBrowser

时间:2015-07-30 09:06:19

标签: javascript c# .net wpf

先介绍一下背景

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

这是暂时的必需品,而我们正在逐步将功能转移到网络应用程序。只要尚未完成,仍然需要WPF客户端。最终,WPF客户端将完全淘汰。

现在针对手头的问题

当用户关闭客户端(网页)时,webbrowser应该捕获该事件并关闭它所属的窗口。

我发现此链接描述了我需要的内容:WebBrowser and javascript window.close()

唉,我不认为那里描述的答案仍然有用,因为甚至不可能做一个window.close(),因为我不是那个打开我正在运行的窗口的人。从那以后,浏览器(正当地)收紧了他们的安全性。

问题

有没有办法触发从客户端关闭的窗口,它会冒泡到WPF?

感谢。

2 个答案:

答案 0 :(得分:1)

在使用WebBrowser.InvokeScriptWebBrowser.ObjectForScripting

之前,我使用WebBrowser控件从JavaScript调用WPF应用程序中的方法

请参阅此MSDN文章How to: Implement Two-Way Communication Between DHTML Code and Client Application Code 另请参阅此CodeProject文章,看起来它可能会解决您的问题 Call a C# Method From JavaScript Hosted in a WebBrowser

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

来自Window的代码:

webBrowser1.ObjectForScripting = new ScriptManager(this);

答案 1 :(得分:0)

那很有效,谢谢!

我做了以下事情:

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

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

    public void CloseWindow()
    {
        this.Window.Close();
    }
}

在我的窗口(加载事件)中:

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

客户端Javascript然后执行:

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