我有一些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中运行得很好。我发现分配事件是不同的,但没有提到读取事件属性。
答案 0 :(得分:0)
事实证明,运行javascript的上下文不正确并且在firefoxwindow上运行(这就是为什么它无法访问事件处理程序)而不是在窗口文档上运行。