我有一个在浏览器 (IE) 中运行的 ActiveX 对象(我有谁的源代码)。ActiveX 对象有一个引发事件的 UI。我想在浏览器中响应这些事件。
我不想从 ActiveX 对象事件中调用 JavaScript 函数:因此,我希望 JavaScript 轮询 ActiveX 对象的方法(例如,“您有任何要报告的事件吗?”)。
我会用这样的代码做到这一点:
function findActiveXObject() {
return document.getElementById('MyActiveXObject');
}
function startPolling() {
setTimeout('pollForEvents()', 100);
}
function pollForEvents() {
var activeXObject = findActiveXObject();
var eventMsg = activeXObject.PollForEvent();
if (eventMsg != null)
{
//do something with the event
alert(eventMsg);
}
//poll again soon
startPolling();
}
什么是好的轮询间隔?
我想,虽然我不确定,工作量很小:它只是调用一个 ActiveX 对象的方法,它要么返回一个已经缓存的字符串,要么返回 null。
我想经常轮询:这样看起来浏览器(实际上是 JavaScript)会迅速响应 ActiveX 对象中的 UI 事件。
100 毫秒太小了吗?50毫秒怎么样?
以 100 毫秒的间隔,我在浏览器中只看到 1% 的 CPU 利用率:但这只是在我的机器上。一般情况下(运行 IE 的台式机)呢?
如果这是一个本机线程,我不会担心每 50 毫秒唤醒一次它,但我在 IE 中运行 JavaScript 的经验很少。