Полностью потерян с событиями JavaScript и OpenLight - PullRequest
0 голосов
/ 21 июня 2011

Клиент дал мне набор функций, чтобы использовать его для проверки на стороне клиента, установлен ли OpenLight или нет.Firefox и IE работают отлично, но Chrome всегда говорит мне, что OpenLight не установлен.

Однако я не совсем понимаю, как это отследить, потому что я совершенно растерялся в том, что происходит.Я гуглил названия событий и просто получаю 0 результатов в Google: 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 голосов
/ 21 июня 2011

Что это делает?Каковы эти события?Как он узнает, что проверяет OpenLight?

  1. Он пытается создать элемент <MyOpenLightDataElement> и добавить его в документ (то есть на веб-страницу).
  2. Создаетсобытие с именем MyOpenLightEvent, затем отправляет (запускает) его.
  3. Это событие должно добавить атрибут с именем reply к элементу в 1, так что теперь он выглядит как <MyOpenLightDataElement reply="1">.
  4. Если это работает (т.е. OpenLight установлен и отвечает на такие события), функция предполагает, что OpenLight установлен правильно и возвращает true, а в противном случае возвращает false.

ВашФункция 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...