检测应用是否处于前台并将焦点更改为应用

时间:2013-11-20 02:53:01

标签: focus clipboard winjs

我正在编写一个处理剪贴板上数据的WinJS应用程序。我看到你可以使用

Windows.ApplicationModel.DataTransfer.Clipboard.addEventListener("contentchanged", function (event) {

监听剪贴板的更改。但是,如果您的应用目前无法获得焦点,则会收到错误消息

WinRT信息:无法访问剪贴板,因为应用程序不在前台。

如何检测应用目前是否处于焦点?此外,是否有一个事件或方法来检测何时重新聚焦?例如,假设我设置了一个内部变量,当应用程序失去焦点时剪贴板会发生变化,并且应该在返回时检查内容?

1 个答案:

答案 0 :(得分:1)

window.onblur事件会告诉您应用失去焦点的时间; window.onfocus会告诉你它何时再次聚焦。 (还有窗口/文档上的visibilitychange事件及其visibilityState属性,您可以使用它来了解应用程序是否可见但没有焦点,如共享屏幕时那样。)

Clipboard app sample in the Windows SDK的场景4展示了如何使用模糊和焦点事件来管理在适当的时间调用剪贴板的getContent方法。

另请注意,因为contentchanged事件来自WinRT对象,所以如果您不打算在应用程序的整个生命周期内收听事件,请务必删除EventListener。也就是说,如果您可能多次为此事件调用addEventListener,忽略删除侦听器将导致内存泄漏。