完全失去了javascript事件和OpenLight

时间:2011-06-21 02:20:46

标签: javascript google-chrome javascript-events

客户给了我一组功能,以便在客户端检查是否安装了OpenLight。 Firefox和IE工作正常,但Chrome总是告诉我没有安装OpenLight。

然而,我真的不明白如何追踪这一点,因为我完全迷失了正在发生的事情。我用谷歌搜索了事件的名称,我在谷歌得到0结果:S例如,以下是在Firefox中检查的代码:

function isOpenLightInstalled() {
    try
    {
        var element = document.createElement("MyOpenLightDataElement");
        document.documentElement.appendChild(element);
        var evt = document.createEvent("Events");
        evt.initEvent("MyOpenLightEvent", true, false);
        element.dispatchEvent(evt);
        if (element.getAttribute("reply") == "1")
        {
            return true;
        }
    }
    catch(err)
    {
    }
    return false;
}

这是做什么的?那些活动是什么?它如何知道它正在检查OpenLight?

以下是Chrome功能:

function isOpenLightInstalled() {
    try
    {
        var customEvent = document.createEvent('Event');
        customEvent.initEvent('GCOLCustomEvent', true, true);
        var element = document.getElementById("GCOpenLightDataElement");
        element.dispatchEvent(customEvent);
        if (element.getAttribute("reply") == "1")
        {
            return true;
        }
    }
    catch(err)
    {
    }
    return false;
}

有人可以请点亮一下:(

谢谢!

1 个答案:

答案 0 :(得分:0)

  

这是做什么的?那些活动是什么?它如何知道它正在检查OpenLight?

  1. 尝试创建<MyOpenLightDataElement>元素并将其附加到文档(即网页)。
  2. 它创建一个名为MyOpenLightEvent的事件,然后调度(运行)它。
  3. 该事件应该将名为reply的属性添加到1中的元素,使其现在看起来像<MyOpenLightDataElement reply="1">
  4. 如果可行(即安装OpenLight并响应此类事件),该函数假定OpenLight已正确安装并返回true,否则返回false
  5. 您的Chrome功能失败,因为据我所知,身份GCOpenLightDataElement的任何内容都不会附加到DOM。您可能希望尝试使用原始函数,并按如下方式更改catch语句:

    catch(err) {
      alert(err);
    }
    

    我对Chrome的建议,可能有效也可能无效:

    function isOpenLightInstalled() {
        try
        {
            var element = document.createElement("GCOpenLightDataElement");
            document.documentElement.appendChild(element);
            var evt = document.createEvent("Event");
            evt.initEvent("GCOLCustomEvent", true, true);
            element.dispatchEvent(evt);
            if (element.getAttribute("reply") == "1")
            {
                return true;
            }
        }
        catch(err)
        {
            console.log(err); // just so we can see any errors with Ctrl+Shift+I
        }
        return false;
    }