Если это не ваше собственное приложение, посмотрите, можете ли вы определить какое-либо безвредное свойство или метод, а затем спроектировать метод-оболочку для вызова, который проверяет с помощью try catch, может ли он получить доступ к объекту, и, если да, вызвать следующий метод в цепочке.(возможно, используя делегат для включения аргументов, и, если он не готов, используйте setTimeout для повторного вызова оболочки, скажем, за 100 мс.
Возможно, вы захотите включить счетчик повторов для восстановления после нескольких попыток, чтобы он небесконечный цикл, если объект сломан.
Пример:
function TryCallObject(delegate, maxtries, timebetweencalls, failCallback, retrycount)
{
if(typeof retrycount == "undefined")
retrycount = 0;
if(typeof failCallback == "undefined")
failCallback null;
try {
//code to do something harmless to detect if objects is ready
delegate(); //If we get here, the object is alive
} catch(ex) {
if(retrycount >= maxtries)
{
if(failCallback != null)
failCallback();
return;
}
setTimeout(function () {
TryCallObject(delegate, maxtries, timebetweencalls, failCallback, retryCount + 1);
}, timebetweencalls);
}
}
И он называется так
TryCallObject(function() { /* your code here */ }, 5, 100);
или
TryCallObject(function() { /* your code here */ }, 5, 100, function() {alert("Failed to access ActiveX");});