2013-05-23 3 views
0

Я пишу расширение Chrome и испытываю трудности с тем, чтобы мои слушатели событий работали правильно.Добавление нескольких прослушивателей событий к одной ссылке

manifset.json

{ 
    "manifest_version": 2, 

    "name": "Test", 
    "description": "testing this", 
    "version": "1.0", 

    "browser_action": { 
    "default_icon": "icon.png", 
    "default_popup": "popup.html" 
    }, 
    "permissions": [ 
    "bookmarks" 
    ] 
} 

popup.html

<!doctype html> 
<html> 
    <head> 
    <title>Testing</title> 
    <style> 
     body { 
     min-width: 357px; 
     overflow-x: hidden; 
     } 

     img { 
     margin: 5px; 
     border: 2px solid black; 
     vertical-align: middle; 
     width: 75px; 
     height: 75px; 
     } 
    </style> 
    <script src="popup.js"></script> 
    </head> 
    <body> 
    </body> 
</html> 

popup.js

document.addEventListener('DOMContentLoaded', function() { 
    chrome.bookmarks.getTree(function (stuff){ 
    traverseBookmarks(stuff[0].children[0].children); 
    }); 
}); 

    function traverseBookmarks(bookmarkTreeNodes) { 
    for(var i=0;i<bookmarkTreeNodes.length;i++) { 
     var bookmark = document.createElement('a'); 

     if(bookmarkTreeNodes[i].url){ 
     console.log("here mother"); 
     bookmark.href = bookmarkTreeNodes[i].url; 
     bookmark.target = "_blank"; 
     } 
     else{ 
     bookmark.addEventListener("click", addChildren(bookmarkTreeNodes[i].children), false); 
     } 
     bookmark.innerHTML = bookmarkTreeNodes[i].title; 
     document.body.appendChild(bookmark); 
     document.body.appendChild(document.createElement("br")); 

     if(bookmarkTreeNodes[i].children) { 
     traverseBookmarks(bookmarkTreeNodes[i].children); 
     } 
    } 
    } 

    function addChildren(children) { 
    var windows = ""; 
    for(var i = 0; i < children.length; i++){ 
     window.open(children[i].url); 
     // windows += 'window.open(' + children[i].url + ');'; 
    } 
    return windows; 
    } 

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

Цель состоит в том, чтобы иметь возможность щелкнуть папку (теперь только ссылку, обозначающую папку), и открыть все ссылки внутри этой папки. Любая помощь приветствуется. Дайте мне знать, если мне нужно что-то разъяснить.

ответ

1
bookmark.addEventListener("click", 
          addChildren(bookmarkTreeNodes[i].children), false); 

Вы выполняете функцию здесь

addChildren(bookmarkTreeNodes[i].children) 
     ^       ^
      |        | 

нужно передать в ссылке

bookmark.addEventListener("click", addChildren, false); 

Вместо этого вы можете обернуть обработчик в затворе и передать ток от i до IIFE.

(function(num) { 
    bookmark 
    .addEventListener("click", function() {    
            addChildren(bookmarkTreeNodes[num].children) }) 
           } , false); 
})(i); 
+0

Я думаю, у вас была синтаксическая ошибка в вашем примере, спасибо. Это помогло. Теперь я могу открыть всплывающее окно с помощью прослушивателя событий. Имея небольшую проблему с открытием нескольких вкладок, но это еще одна проблема, с которой я могу работать. Большое спасибо! Я вставил код, в который я попал, используя который в основном похож на ваш. (функция (num) { bookmark.addEventListener ("click", function() { addChildren (bookmarkTreeNodes [num] .children, false); })}) (i); –

Смежные вопросы