关闭在WPF浏览器中运行的网页
本文关键字:运行 网页 浏览器 WPF | 更新日期: 2023-09-27 18:05:26
先介绍一下背景
我正在研究一个Web应用程序,它将在一个Web浏览器中运行,在一个WPF应用程序中。
当我们逐渐将功能转移到web应用程序时,这是暂时的需要。只要这还没有完成,WPF客户端仍然是需要的。最终,WPF客户端将完全被淘汰。
现在来谈谈手头的问题
当用户关闭客户端(网页)时,浏览器应该捕获该事件并关闭作为子窗口的窗口。
我发现这个链接描述了我需要什么:WebBrowser和javascript窗口。close()
唉,我不认为这里描述的答案仍然有效,因为甚至不可能执行window.close(),因为我不是打开我正在运行的窗口的人。从那以后,浏览器(理所当然地)加强了它们的安全性。
是否有一种方法来触发一个窗口关闭从客户端,气泡到WPF?
谢谢。
在使用WebBrowser.InvokeScript
和WebBrowser.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();
}