【问题标题】:How to detect whether an object is ready in JS?如何在JS中检测一个对象是否准备好?
【发布时间】:2010-10-29 11:14:10
【问题描述】:

我的 Web 应用程序包含一个 ActiveX 控件。但是,当我运行该应用程序时,我间歇性地收到错误“预期对象”错误。当我调用它的属性/方法时,有时控件似乎还没有准备好。有没有办法可以使用 JS 检测对象是否准备好?

非常感谢。

【问题讨论】:

    标签: javascript object activex controls


    【解决方案1】:

    如果它不是你自己的应用程序,看看你是否可以识别一些无害的属性或方法,然后围绕调用设计一个包装方法,用 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");});
    

    【讨论】:

    • 感谢您的回答大卫。我能够使用您的方式捕获错误,但不断增加超时并没有解决问题。我们结束了删除
      并使用了加载速度更快的
    • 好的,是不是渲染的表导致了延迟?
    【解决方案2】:

    如果是你自己的应用,请包含一个 readystate 事件

    http://msdn.microsoft.com/en-us/library/aa751970%28VS.85%29.aspx

    【讨论】:

      【解决方案3】:

      我们在 FireBreath (http://firebreath.org) 中执行此操作的方式是向 javascript 触发事件;它通过在 标记中提供函数名称、获取对浏览器窗口 IDispatch 指针的引用以及为 param 标记中命名的函数执行 PROPERTYGET 来实现此目的。

      当插件准备就绪时,我们会调用该方法。这具有在所有浏览器中以几乎相同的方式工作的优势,因为 FireBreath 插件既可以作为 ActiveX 控件工作,也可以作为 NPAPI 插件工作。

      【讨论】:

        猜你喜欢
        相关资源
        最近更新 更多
        热门标签