>Форум Mozilla Россия http://forum.mozilla-russia.org/index.php >Разработка http://forum.mozilla-russia.org/viewforum.php?id=18 >panel. отображение swf и клики мышью http://forum.mozilla-russia.org/viewtopic.php?id=42756 |
Elena > 16-01-2010 12:19:29 |
День добрый. Выделить код Код:var m_div = document.createElementNS("http://www.w3.org/1999/xhtml","div"); m_div.innerHTML="<embed src=\"sp.swf\" width=\"320\" height=\"250\" type=\"application/x-shockwave-flash\" /> " panel.appendChild(m_div); все отображется и работает корректно, за исключение того что элементы управления в swf реагируют исключительно на двойной клик мышью. |
Infocatcher > 16-01-2010 21:39:21 |
Видимо, это связано с
(https://developer.mozilla.org/en/XUL/panel#pageText) В любом случае, вроде как, требуется <browser type="content" /> или <iframe type="content" />, чтобы содержимое не получало неположенных привилегий. |
Elena > 16-01-2010 21:51:51 |
Infocatcher пишет
Интересная фигня получается и еще в догонку вопрос - мне надо с этим флешом, который в подсказке показывается общаться. Насколько я поняла делается это следующим образом как мне получить id флеша который в panel встраивается? |
Infocatcher > 17-01-2010 02:34:32 |
Хорошо бы сначала проверить с browser/iframe. Или все так же глючит?
Сначала добавить, а потом обратиться? Выделить код Код:var myFlash = document.createElementNS("http://www.w3.org/1999/xhtml", "embed"); someElt.appendChild(myFlash); Ну, или вручную id задать: |
Elena > 18-01-2010 13:15:30 |
Infocatcher пишет
попробовала, тоже самое получается. Выделить код Код:<browser type="content" ><embed src=\"sp.swf\" width=\"320\" height=\"250\" type=\"application/x-shockwave-flash\" /> </browser> или пишу как-то не так? у меня возникло подозрение, что первый клик мышью просто передает фокус ввода панели, а второй уже нажимает на орган управления. у панели есть какой-нибудь параметр который за фокус ввода отвечает? UPD. пробовала panel.focus(), но не помогает |
Infocatcher > 18-01-2010 17:26:29 |
Так получается не страница, загруженная в browser, а элементы внутри. Впрочем, на экранированные кавычки может реагировать весьма неожиданно. или + Выделить код Код:document.getElementById("testBrowser") .setAttribute( "src", "data:text/html," + encodeURIComponent("<embed src=\"sp.swf\" width=\"320\" height=\"250\" type=\"application/x-shockwave-flash\" />") ); Примерно так. Или можно вместо задания атрибута src использовать метод loadURI, только он сразу после добавления browser'а может не отрабатывать. |
Elena > 18-01-2010 18:11:12 |
Infocatcher пишет
нее, у меня в коде все экранируется нормально, просто торопилась когда здесь набирала вообще не работает, ничего не показывается работает как и раньше - только двойной клик Выделить код Код:<browser type="content" id="testBrowser" /> document.getElementById("testBrowser").setAttribute("src", "data:text/html," + encodeURIComponent("<embed src=\"sp.swf\" width=\"320\" height=\"250\" type=\"application/x-shockwave-flash\" />")); не работает, ничего не показывает Выделить код Код:<iframe type="content" id="testBrowser" /> document.getElementById("testBrowser").setAttribute("src", "data:text/html," + encodeURIComponent("<embed src=\"sp.swf\" width=\"320\" height=\"250\" type=\"application/x-shockwave-flash\" />")); флешка показывается, но на мышь вообще не реагирует |
Infocatcher > 18-01-2010 19:27:50 |
Тогда, видимо, с panel никак. |
Elena > 19-01-2010 13:23:49 |
Infocatcher пишет
Выделить код Код:<tooltip id="tt" noautohide="false"/> var m_div = document.createElementNS("http://www.w3.org/1999/xhtml","div"); m_div.innerHTML="<embed src=\"sp.swf\" width=\"320\" height=\"250\" type=\"application/x-shockwave-flash\" /> " tt.appendChild(m_div); в таком варианте тоже только двойной клик работает. |
Elena > 21-01-2010 13:55:56 |
Еще чуть-чуть поэксперементировала с панелью - четко получается что при клике мышью ей передается фокус ввода, при движении мыши он теряется. Буду очень признательна за подсказку |
Infocatcher > 22-01-2010 01:20:41 |
Н-ну, попробовать или тот же метод для какого-нибудь элемента внутри панели. |
Elena > 22-01-2010 12:52:31 |
Infocatcher пишет
пробовала, не работает вроде. тогда такой вопрос - хочу попробовать сделать тоже самое, но запихнув флешку в window. но мне нужен доступ к ней из основного кода тубара.как можно организовать прозрачное взаимодействие между разными окнами одного расширения. |
Infocatcher > 22-01-2010 20:16:28 |
Elena пишет
Ну, если окно не нужно искать (и если это не компонента, в которой нету глобального объекта window), то все просто: А из открытого окна – window.opener
Тогда лучше и правда отдельное окно. А иначе придется искать окно с уже загруженной флешкой, а при его закрытии подгружать флешку в другом окне (или переносить... вроде, можно). А для окон есть https://developer.mozilla.org/En/nsIWindowMediator: Выделить код Код:var w = Components.classes["@mozilla.org/appshell/window-mediator;1"] .getService(Components.interfaces.nsIWindowMediator) .getMostRecentWindow("someWindowType") || window.openDialog( ... ); + что-то вроде Выделить код Код:<?xml version="1.0"?> <window xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" windowtype="someWindowType" ... – чтобы можно было открыть только одно окно. |
Elena > 22-01-2010 20:40:01 |
огромное спасибо за ответ! как окно открыть вроде понятно, как туда передать свою флешку и получать к ней доступ вроде тоже (нашла вот здесь https://developer.mozilla.org/en/Working_with_windows_in_chrome_code) Infocatcher пишет
проблема в том, что флешка проигрывает музыку, и когда открываешь новое окно ff, создается новая флешка и музыка начинает играть заново вторым экземпляром. Нужно чтобы использовался один экземпляр во всех открытых окнах. Не очень поняла как это можно сделать, и где надо объявить чтобы она создавалась один раз и потом только использовалась? |
Infocatcher > 23-01-2010 20:26:34 |
Elena пишет
https://developer.mozilla.org/En/Workin … ta_sharing Выделить код Код:var mainWin = Components.classes["@mozilla.org/appshell/window-mediator;1"] .getService(Components.interfaces.nsIWindowMediator) .getMostRecentWindow("navigator:browser"); if(!mainWin) return; ... |
Elena > 25-01-2010 13:52:06 |
Infocatcher пишет
Спасибо, буду пробовать |
Infocatcher > 25-01-2010 14:39:12 |
Elena пишет
Да, в том, что было открыто первым. Или нужно делать его отдельным окном. |
Elena > 29-01-2010 12:49:56 |
Infocatcher пишет
Пытаюсь запихнуть окошко плеера в отдельное окно. Выделить код Код:music_pleer = document.createElementNS("http://www.w3.org/1999/xhtml","div"); music_pleer.innerHTML="<embed id=\"music_pleer_id\" src=\"sp.swf\" width=\"320\" height=\"270\" type=\"application/x-shockwave-flash\" /> " var win=window.openDialog("chrome://toolbar/content/music_window.xul", '', "centerscreen,resizable"); в music_window.xul: Выделить код Код:<window id="music_window" xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul" width="320" height="250" hidechrome="true" onload=init()" </window> и Выделить код Код:init : function(){ var pleer=window.opener.music_frame; dump(pleer+"\n"); appendChild(pleer); }, но оно не хочет работать. что делаю не так? |
Elena > 29-01-2010 14:06:55 |
даже если делать так Выделить код Код:init : function(){ var pleer = document.createElementNS("http://www.w3.org/1999/xhtml","div"); pleer.innerHTML="<embed id=\"music_pleer_id\" src=\"_sp.swf\" width=\"320\" height=\"270\" type=\"application/x-shockwave-flash\" /> " appendChild(pleer); }, все равно глухо, что-то у меня уже вообще голова кругом идет... |
Infocatcher > 30-01-2010 12:54:14 |
Будет искать глобальный метод appendChild, а в объекте window его быть не должно. , или сразу Ну, и в консоль ошибок полезно заглядывать, там обычно что-нибудь интересное пишет. Пригодится javascript.options.showInConsole = true в about:config или Console² (https://developer.mozilla.org/en/Settin … nvironment). |
Elena > 01-02-2010 12:58:03 |
Infocatcher пишет
ага, так работает. спасибо! Только получается такая штука - я в созданное окно добавляю window.opener.pleer, но при закрытии окна он убивается (музыка перестает играть), несмотря на то что создан в главном окне. я наивно полагала, что если элемент создан в главном окне, то и уничтожатся должен вместе с ним, это не так? Infocatcher пишет
В консоль смотрю, но в данном случае там было пусто |
Infocatcher > 01-02-2010 15:10:03 |
Elena пишет
.appendChild() переносит элемент. Elena пишет
По-моему, проще держать его в отдельном окне. А окно это закрывать или при закрытии последнего окна браузера, или пусть само закрывается по Файл – Выход. |