在WebBrowser控件中使用时,document.hidden错误地为false
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在WebBrowser控件中使用时,document.hidden错误地为false相关的知识,希望对你有一定的参考价值。
我想检测javascript窗口何时最小化,所以我使用的是document.hidden
。在下面的代码段中,单击“开始”并通过单击最小化按钮,在任务栏中切换应用程序图标,使用Win +向下箭头,使用Win + D等最小化窗口。
当窗口最小化时,您将看到textarea中出现“隐藏”。
var startButton = document.getElementById("start");
var stopButton = document.getElementById("stop");
var ta = document.getElementById("ta");
var id;
startButton.onclick = function() {
id = setInterval(function() {
ta.value += document.hidden ? "hidden
" : "visible
";
}, 1000);
};
stopButton.onclick = function() {
if (id) clearInterval(id);
};
<button id="start">Start</button>
<button id="stop">Stop</button>
<br />
<textarea id="ta" cols="50" rows="20"></textarea>
没问题。
但是,我在VB6中托管这个JS代码。
我创建了一个简单的项目,其中包含一个带有WebBrowser
控件和CommandButton
的表单。我唯一的代码是:
Private Sub Command1_Click()
WebBrowser1.Navigate "http://localhost:1234/mypage.html"
End Sub
单击命令按钮将我带到同一页面:
在VB6中,为这三种情况显示“隐藏”:
- 单击最小化按钮
- 赢+向下箭头
- 赢+ D
但不是,在这种情况下:
- 切换任务栏中的应用程序图标
我还注意到"hidden"
仅在窗口第一次最小化时显示。如果再次将其最小化,它将显示“可见”。
我猜这是WebBrowser控件如何与JS集成的错误?有没有人有这方面的解决方法?
我可能很快会将这个问题重新用于更广泛的问题,因为这与document.hidden
错误关系不大,更多的是与WebBrowser
没有很好地融合JS的Page Visibility。
我发现的一个更普遍的问题是visibilitychange
处理程序在VB6中由WebBrowser
控件托管的页面中运行时不会触发,但在浏览器中完全正常:
var ta = document.getElementById("ta");
document.addEventListener("visibilitychange", function ()
{
ta.value += document.visibilityState + "
";
});
<textarea id="ta" cols="50" rows="20"></textarea>
我通过听Resize
事件来解决它,每当WindowState
改变时,我都会在我的JS代码中设置一个属性来指示状态:
Private Sub Form_Resize()
Static lWindowState As Long
Dim lNewWindowState As Long
Dim lOldWindowState As Long
lNewWindowState = m_DesktopForm.WindowState
lOldWindowState = lWindowState
If lWindowState <> lNewWindowState Then
lWindowState = lNewWindowState
Dim bHidden As Boolean
bHidden = (lWindowState = vbMinimized)
Call CallByName(MyJSObj, "windowIsHidden", VbLet, bHidden)
End If
End Sub
我的JS有一个对象(VB可以引用),如下所示:
MyJSObj = {
windowIsHidden: false
}
然后我添加了一个方法来包装document.hidden
:
function isDocumentHidden() {
// if document.hidden is true, trust that. If it's not true, then fall back on what VB says
return document.hidden || MyJSObj.windowIsHidden;
}
我在我的代码中使用该方法而不是document.hidden
。
以上是关于在WebBrowser控件中使用时,document.hidden错误地为false的主要内容,如果未能解决你的问题,请参考以下文章
在WebBrowser控件中使用时,document.hidden错误地为false