>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Разработка http://forum.mozilla-russia.org/viewforum.php?id=18 >Передача сообщения со страницы в расширение http://forum.mozilla-russia.org/viewtopic.php?id=61381 |
atrac > 24-12-2013 11:54:14 |
Здравствуйте. Выделить код Код:<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <script type="text/javascript" charset="utf-8"> function send_request() { var data = {"type":"outcome.update_list"} var request = document.createTextNode(JSON.stringify(data)); document.head.appendChild(request); var event = document.createEvent("HTMLEvents"); event.initEvent("something-query1", true, false); request.dispatchEvent(event); } </script> <body> <p><button onclick="send_request();"> Послать </button></p> </body> </html> В расширении повесил обработчик который ловит и принимает содержимое data: Выделить код Код:var conn = false; var data; document.addEventListener("something-query1", function(event){chek(event.target.nodeValue)}, true, true); function connect(){ if (!conn){ conn = true; } else { conn = false; } } function chek(e){ console.log(e) data = e; console.log(conn); } Проблема в том что в расширении есть переменная conn значение которой из расширения я могу поменять, функция connect(). То есть когда chek() вызываю с расширения то значение conn показывает правильно, если chek() вызывается с addEventListener то значение всегда false. В чем проблема? Почему chek() не берет правильное значение в контексте addEventListenerа? Дело даже в том что если chek() вызывается из addEventListenerа то она не имеет доступа к внутренним переменным расширения. То есть не получается присвоить внутренней переменной data=e. Непойму почему. |
atrac > 24-12-2013 19:52:00 |
Нашел в чем причина. Выделить код Код:var tab = window.opener.gBrowser.addTab('http://localhost/index.html'); window.opener.gBrowser.selectedTab = tab; var browser = window.opener.gBrowser.getBrowserForTab(tab); browser.addEventListener("something-query1", function(event){chek(event.target.nodeValue);}, false, true); |