问题标签 [visibilitychange]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - 如果使用全屏 api,visibilitychange 会被多次调用
我正在使用visibilitychange
浏览器的事件。一切看起来都不错。
单击我的一个按钮后,我fullScreen API
习惯将网站带入全屏模式。
我遇到的问题是visibilitychange
进入fullscreen
模式时事件被调用两次,当我退出全屏模式时,visibilitychange
被调用 4 次。发生这种情况有什么原因吗?有没有办法让它只被调用一次?
rxjs - document.visibilityState 值与 mapTo() 运算符不符
当用作带有事件的可观察对象的管道时,运算符document.visibilityState
返回的值与预期不同。mapTo()
document.visibilitychange
笔示例:https ://codepen.io/nametoforget/pen/ZEQmdBj
请参阅控制台登录笔。
javascript - 在 Chrome 中打开 window.open 后可见性 API 不起作用
我试图使用 Visibility API,但它不适用于孩子。重现的最小示例:
之后,父窗口仍然打印“可见”-“隐藏”,但子窗口仅在刷新时打印“隐藏”一次。
它在最新的 Opera 浏览器中运行良好,但在 Chrome 中却不行
老实说,当我来到这个最小的复制时,我被卡住了,不知道在哪里挖掘。有什么想法可能是错的吗?
javascript - 当 document.hidden 为 true 时,Chrome 中不会触发滚动事件。任何解决方法?
当页面隐藏时,Chrome 永远不会触发滚动事件,尽管页面实际上正在滚动。这看起来像是他们为减少不可见页面的 CPU 和网络使用而实施的。
有没有办法解决这种行为,即使使用 Chrome 的标志或扩展程序?我需要触发“滚动”事件,因为这是我正在测试的。
javascript - 在浏览器选项卡之间切换时防止 SMIL 动画暂停
在浏览器选项卡之间切换时如何防止 SMIL 动画暂停?
我有 SVG 时钟,它使用<animatetransform>
. 当您切换到另一个选项卡时,动画会冻结并且没有赶上它应该在的位置。我希望此动画在页面不可见时平稳运行,或者在页面再次可见时暂停并赶上。我可以把它转换成 CSS 动画,没关系。
这是秒针的简化代码:
HTML:
JS:
我知道如何使用Page Visibility API
来暂停事情,但如何阻止他们这样做对我来说是不可理解的。
javascript - 有什么方法可以知道浏览器中的选项卡何时被窗口覆盖?
TL;DR:我正在开发一个 Chrome 扩展程序,只有当一个选项卡可见且未被另一个窗口覆盖时,我才需要增加计数。有没有办法检测到这一点?
我尝试过使用Page Visibility API,但它的问题是:
想象一下,我有两个并排停靠的窗户。我的重点是窗口“A”中的选项卡“X”。但是,在旁边,我还在窗口“B”的前景中打开了选项卡“Y”。
如果我document.hidden
当时检查选项卡“Y”,它将解析为false
,这就是我想要的。但是,如果我随后扩展窗口“A”以覆盖全屏并让窗口“B”在其后面打开而不是最小化,则document.hidden
选项卡“Y”仍然相等false
,即使从用户视觉的角度来看,该选项卡完全无形的。
将事件侦听器添加到blur
andfocus
事件也无济于事,因为blur
只要添加到的文档失去焦点就会触发,这适用于我的窗口“A”覆盖整个屏幕的情况,但不适合我有窗口'A'和'B'并排的场景。在这种情况下,当标签“Y”失去焦点时,“模糊”事件将被触发,即使标签“Y”在技术上对任何正在查看屏幕的人都是可见的。
我需要的结果如下所示:
- 选项卡“Y”位于非最小化窗口的前景并且未被另一个窗口覆盖:
increaseCount() // regardless of whether the tab is focused or not
- 选项卡“Y”位于非最小化窗口的前景但被另一个窗口覆盖,因此任何人类观察者都看不到其内容:
// don't increase count
有没有办法检测到这一点?
javascript - 为什么我在 Safari 中对页面卸载的 fetch keepalive 调用失败?
当用户关闭或离开特定页面时,我需要发回一些数据以进行报告。因此,我设置了一个 API 端点并使用 window.fetch 并设置了 keepalive 标志,以确保即使页面完全卸载,调用也会完成。
有问题的 Javascript 调用如下所示:
我通过观察 pagevisibility 事件来调用它,并在页面被隐藏或终止时调用它,使用页面生命周期库。
首选行为是完成调用,即使重新加载页面或单击另一个链接也是如此。但是由于这个 CORS 错误,它没有发生。它在 Chrome 和 Firefox 中运行良好,但在 Safari 中失败并在控制台中显示以下错误消息:
由于访问控制检查,Fetch API 无法加载(api 端点)。
如果在任何其他情况下调用相同的 fetch 调用(例如,单击链接或最小化然后最大化页面),则在 Safari 中也可以使用相同的 fetch 调用,因此在页面卸载时调用它是特定的。
haskell - 如何获得在`document`的`visibilitychange`上触发的反射事件?
Reflex.DOM
不visibilitychange
公开document
. 它不能,因为据我了解 reflex 不会暴露document
,这是低级 DOM 交互的一部分,JSDOM
因此也是低级 DOM 交互的一部分。
无论如何,我将不得不依赖这样的东西:
visibilitychange
暴露在GHCJS.DOM.Document
https://hackage.haskell.org/package/ghcjs-dom-0.9.4.0/docs/GHCJS-DOM-Document.html
使用 type visibilitychange :: EventName Document Event
,但在 JSDOM 命名空间中。
编辑:为什么我需要 visibilitychange 事件?每次可见性更改触发并更改为“隐藏”时,我都希望将我的应用程序的状态保留在本地存储中。
html - 在 onvisibilitychange 回调中调用 document.hasFocus() 时总是返回 false
似乎总是在事件侦听器回调document.hasFocus()
的上下文中返回 false 。visibilitychange
我知道我可以使用document.hidden
,但我更喜欢使用hasFocus()
,因为当它是真的时它会更窄一些。
我更想知道为什么会这样。是不是因为每次visibilitychange
被调用时document.hasFocus()
实际上都不是真的,因为document
必须聚焦但在被调用之前不会发生这种情况visibilitychange
?
示例1,我们从tabA切换到tabB ->document.hasFocus()
设置为false
然后visibilitychange
运行。示例 2,我们从 tabB 切换回 tabA ->visibilitychange
运行,document.hasFocus()
仍然是 false,因为我们在技术上没有专注于文档,因此它返回 false?只有当我们鼠标点击进入文档时才会document.hasFocus()
成立?