用于查找具有正确事件的元素的代码

时间:2011-03-21 17:06:52

标签: javascript events firefox firefox3.6 firefox4

我有一些firefox的代码,用于检查页面上的元素是否存在某个事件处理程序,在本例中为onclick。自从FF4问世以来,我一直在获得NS_ERROR_NOT_AVAILABLE,我猜这与元素周围的XPCNativeWrapper有关。这是我使用的代码:


var elem = null;
var elems = doc.getElementsByTagName('td');
var firefoxWindow = window;
for (a = 0; a < elems.length; a++) {
    if (((elems[a] != null && elems[a].hasAttributes() == true && elems[a].getAttribute('onclick') != null && elems[a].getAttribute('onclick').toString().match(/Goodbye Wonderful/gim) != null && elems[a].getAttribute('onclick').toString().match(/Goodbye Wonderful/gim).length >= 0) || (elems[a] != null && elems[a].onclick != null && elems[a].onclick.toString().match(/Goodbye Wonderful/gim) != null && elems[a].onclick.toString().match(/Goodbye Wonderful/gim).length >= 0))) elem = elems[a];
}
var found = false;
var window = null;
for (var i = 0; i < firefoxWindow.frames.length; i++) {
    if (firefoxWindow.frames[i].toString().toLowerCase().indexOf('object window') > -1) {
        window = firefoxWindow.frames[i];
        break;
    }
}

function recursiveSearch(frames) { for (var i = 0; i < frames.length; i++) { var elems = frames[i].document.getElementsByTagName('td'); for (a = 0; a < elems.length; a++) { if (((elems[a] != null && elems[a].hasAttributes() == true && elems[a].getAttribute('onclick') != null && elems[a].getAttribute('onclick').toString().match(/Goodbye Wonderful/gim) != null && elems[a].getAttribute('onclick').toString().match(/Goodbye Wonderful/gim).length >= 0) || (elems[a] != null && elems[a].onclick != null && elems[a].onclick.toString().match(/Goodbye Wonderful/gim) != null && elems[a].onclick.toString().match(/Goodbye Wonderful/gim).length >= 0))) elem = elems[a]; } if (elem) { found = true; return; } else { if (frames[i].frames.length > 0) { recursiveSearch(frames[i].frames); } } } } if (!elem && window.frames.length > 0) { recursiveSearch(window.frames); } if (elem != null) { print('##Result##' + elem.tagName); } else { print('failed');

我为中间的长行道歉,但确实没有空引用。我无法找到任何有关事件的更改,因为这在FF 3.6中运行得很好。我发现分配事件是不同的,但没有提到读取事件属性。

1 个答案:

答案 0 :(得分:0)

事实证明,运行javascript的上下文不正确并且在firefoxwindow上运行(这就是为什么它无法访问事件处理程序)而不是在窗口文档上运行。