Может установить атрибут mouseover html с помощью javascript, но не может назначить функцию свойству mouseover в Firefox - PullRequest
1 голос
/ 01 ноября 2011

Очевидно, я делаю что-то глупое.

    processTextNodes: function processTextNodes(node) { 
    node = node || content.document.body;                    // base node 
    var children = node.childNodes, i = 0;

    while (node = children[i]) { 
        if (node.nodeType == 3 && node.textContent) {        // text node found, replace enclosed text.
            if (node.nodeName == "script") continue;

            /*node.parentNode.setAttribute("onmouseover", "alert(\"AAA\");");*/
            node.parentNode.onmouseover = function(){ alert("AAA") };
            node.textContent = aatel.transliterate(node.textContent);
        }
        if (node.nodeType == 1) {
            if (node.title) node.title = aatel.transliterate(node.title);
            if (node.alt)   node.alt = aatel.transliterate(node.alt);
        }
        processTextNodes(node); 
        i++; 
    }
},

Выше приведен метод из расширения, которое я пишу. При запуске, как указано выше, я получаю следующее в консоли ошибок

Error: uncaught exception: [Exception... "Component is not available"  nsresult: "0x80040111 (NS_ERROR_NOT_AVAILABLE)"  location: "JS frame :: chrome://aatel/content/overlay.js :: processTextNodes :: line 97"  data: no]

В случае возникновения двусмысленности, строка 97:

node.parentNode.onmouseover = function(){ alert("AAA")};

Если я закомментирую строку, присваивающую функцию .onmouseover, и раскомментирую строку setAttribute прямо над ней, она будет работать так, как вы ожидаете. Большое уродливое непрозрачное сообщение об исключении мне мало помогает. Что я делаю неправильно? Javascript не является моей сильной стороной.

Ответы [ 2 ]

2 голосов
/ 01 ноября 2011

Похоже, вы пытаетесь использовать события в расширении Firefox. Попробуйте использовать addEventListener для добавления событий:

node.parentNode.addEventListener("mouseover", function () {
    alert("AAA");
}, false);
0 голосов
/ 01 ноября 2011

Установщик onmouseover делает определенные предположения. Например, предполагается, что вызывающий его скрипт работает с объектом Window. Если это не так, он выбросит.

Если ваш скрипт выше находится в компоненте JS в расширении, он не работает с окном ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...