페이지의 모든 앵커 태그에 이벤트 리스너를 추가하는 Firefox 확장 프로그램을 작성하고 있습니다. 본질적으로 나는 가지고있다 :자바 스크립트로 추가 된 앵커에 이벤트를 첨부하는 XUL
window.addEventListener("load", function() { myExtension.init(); }, false);
var myExtension = {
init: function() {
var appcontent = document.getElementById("appcontent");
if(appcontent)
appcontent.addEventListener("DOMContentLoaded", myExtension.onPageLoad, true);
},
onPageLoad: function(event) {
var doc = event.originalTarget;
var anchors = doc.getElementsByTagName("a");
//attach event listeners
}
}
이것은 페이지의 대부분의 태그에 적용된다. 문제는 자바 스크립트로 추가 된 태그가 이벤트 리스너를 첨부하지 않는다는 것입니다. 나는 재정의 createElement를 시도했다 :
//in the onPageLoadFunction
var originalCreateElement = doc.createElement;
doc.createElement = function(tag) {
if (tag != "a"){
return originalCreateElement(tag);
}
var anchor = originalCreateElement("a");
anchor.addEventListener("mouseover", myInterestingFunction, false);
return anchor;
}
와 나는 DOM 삽입 청취자
//in the onPageLoadFunction
function nodeInserted(event){;
addToChildren(event.originalTarget);
}
function addToChildren(node){
if (node.hasChildNodes()){
var nodes = node.childNodes;
for (var i = 0; i < nodes.length; i++){
addToChildren(nodes[i]);
}
}
if (node.nodeName == "a"){
anchorEvent(node); //adds event listeners to node
}
}
doc.addEventListener("DOMNodeInserted", nodeInserted, false);
하지만 둘 다 일을 추가하는 시도했습니다. 이러한 앵커 객체에 대한 참조를 얻으려면 어떻게해야합니까? 그래서이 객체에 리스너를 추가 할 수 있습니까? "페이지에있는 모든 앵커 태그에 이벤트 리스너를"추가
감사
위에서 지적한 DOM 돌연변이 이벤트를 시도했지만 작동하지 않는 것 같습니다. 사용자가 여러 탭을 동시에 열어서 일정 기간 동안 모두 폴링하므로 확장 프로그램에서 페이지를 주기적으로 폴링하는 것이 문제가됩니다. 그것은 속도가 느려집니다. – josiahdecker
그래서 왜 돌연변이 듣기가 당신을 위해 작동하지 않는지 모르겠다. 알아 내려면 테스트 케이스를 만들어야합니다. 청취자가 발사하지 않았다고 확신합니까? 어쩌면 DOM 트리의 더 깊은 요소에 등록하려고 시도 할 것인가? /// 어쨌든 내가 제안한 마지막 해결책이 더 좋다고 생각하니, 시도해 보셨습니까? – Nickolay
로드 한 후 1.5 초 후에 페이지 폴링을 시도했는데 대부분의 링크를 얻을 수 있습니다. 또한 3 초마다 페이지 폴링을 시도했지만 너무 느려졌습니다. 폴링이 작동합니다. 감사합니다. 나는 좀 더 우아한 해결책을 원했다. – josiahdecker