Полезная информация

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

№116-01-2010 12:19:29

Elena
Участник
 
Группа: Members
Откуда: Москва
Зарегистрирован: 24-05-2006
Сообщений: 65
UA: Safari 4.0

panel. отображение swf и клики мышью

День добрый.
такая проблема возникла - есть panel, в тей отображается  swf файл вот так

Выделить код

Код:

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 реагируют исключительно на двойной клик мышью.
Если тот-же файл swf открывать просто в ff, то все работает корректно.
Проблему с двойными кликами как-нибудь можно пофиксить?

Отсутствует

 

№216-01-2010 21:39:21

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 3.6

Re: panel. отображение swf и клики мышью

Видимо, это связано с

Warning: If you attempt to place a browser  with a type  of content or a iframe  with a type of content in a panel, mouse interaction will not work correctly with the web page. This is due to bug 130078. You might be tempted to remove the type attribute because it appears to make things work, but do NOT do this. It will give the loaded web page access to chrome.

(https://developer.mozilla.org/en/XUL/panel#pageText)

В любом случае, вроде как, требуется <browser type="content" /> или <iframe type="content" />, чтобы содержимое не получало неположенных привилегий.

Отредактировано Infocatcher (16-01-2010 21:39:51)


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№316-01-2010 21:51:51

Elena
Участник
 
Группа: Members
Откуда: Москва
Зарегистрирован: 24-05-2006
Сообщений: 65
UA: Safari 4.0

Re: panel. отображение swf и клики мышью

Infocatcher пишет

В любом случае, вроде как, требуется <browser type="content" /> или <iframe type="content" />, чтобы содержимое не получало неположенных привилегий.

Интересная фигня получается :(
а есть ли какой-нибудь другой вариант как показать флеш в качестве подсказки к toolbutton?

и еще в догонку вопрос - мне надо с этим флешом, который в подсказке показывается общаться. Насколько я поняла делается это следующим образом

Выделить код

Код:

var myFlash = document.getElementById("myFlash").SetVariable("myVar", sendText);

как мне получить id флеша который в panel встраивается?

Отсутствует

 

№417-01-2010 02:34:32

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 3.6

Re: panel. отображение swf и клики мышью

а есть ли какой-нибудь другой вариант как показать флеш в качестве подсказки к toolbutton?

Хорошо бы сначала проверить с browser/iframe. Или все так же глючит?
А если нужно обязательно кликабельный флеш, то придется или что-то делать с автоскрытием <tooltip>, или создавать свой контейнер.
Вообще, помнится, если <tooltip> показывать вручную (openPopup/openPopupAtScreen), то автоскрытия не будет.

как мне получить id флеша который в panel встраивается?

Сначала добавить, а потом обратиться?

Выделить код

Код:

var myFlash = document.createElementNS("http://www.w3.org/1999/xhtml", "embed");
someElt.appendChild(myFlash);

Ну, или вручную id задать:

Выделить код

Код:

m_div.innerHTML="<embed id='someId' ...

Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№518-01-2010 13:15:30

Elena
Участник
 
Группа: Members
Откуда: Москва
Зарегистрирован: 24-05-2006
Сообщений: 65
UA: Safari 4.0

Re: panel. отображение swf и клики мышью

Infocatcher пишет

Хорошо бы сначала проверить с browser/iframe. Или все так же глючит?

попробовала, тоже самое получается.

Выделить код

Код:

<browser type="content" ><embed src=\"sp.swf\" width=\"320\" height=\"250\" type=\"application/x-shockwave-flash\" /> </browser>

или пишу как-то не так?

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

UPD. пробовала panel.focus(), но не помогает

Отредактировано Elena (18-01-2010 13:34:33)

Отсутствует

 

№618-01-2010 17:26:29

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 3.6

Re: panel. отображение swf и клики мышью

Так получается не страница, загруженная в browser, а элементы внутри. Впрочем, на экранированные кавычки может реагировать весьма неожиданно.

Выделить код

Код:

<browser type="content" src="sp.swf" />

или

Выделить код

Код:

<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\" />")
    );

Примерно так. Или можно вместо задания атрибута src использовать метод loadURI, только он сразу после добавления browser'а может не отрабатывать.


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№718-01-2010 18:11:12

Elena
Участник
 
Группа: Members
Откуда: Москва
Зарегистрирован: 24-05-2006
Сообщений: 65
UA: Safari 4.0

Re: panel. отображение swf и клики мышью

Infocatcher пишет

Впрочем, на экранированные кавычки может реагировать весьма неожиданно.

нее, у меня в коде все экранируется нормально, просто торопилась когда здесь набирала

Выделить код

Код:

<browser type="content" src="sp.swf" />

вообще не работает, ничего не показывается

Выделить код

Код:

<iframe type="content" src="sp.swf" />

работает как и раньше - только двойной клик


Выделить код

Код:

<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\" />"));

флешка показывается, но на мышь вообще не реагирует

Отсутствует

 

№818-01-2010 19:27:50

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 3.6

Re: panel. отображение swf и клики мышью

Тогда, видимо, с panel никак. :|


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№919-01-2010 13:23:49

Elena
Участник
 
Группа: Members
Откуда: Москва
Зарегистрирован: 24-05-2006
Сообщений: 65
UA: Safari 4.0

Re: panel. отображение swf и клики мышью

Infocatcher пишет

А если нужно обязательно кликабельный флеш, то придется или что-то делать с автоскрытием <tooltip>, или создавать свой контейнер.

Выделить код

Код:

<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 (19-01-2010 13:24:07)

Отсутствует

 

№1021-01-2010 13:55:56

Elena
Участник
 
Группа: Members
Откуда: Москва
Зарегистрирован: 24-05-2006
Сообщений: 65
UA: Safari 4.0

Re: panel. отображение swf и клики мышью

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

Буду очень признательна за подсказку

Отсутствует

 

№1122-01-2010 01:20:41

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 3.6

Re: panel. отображение swf и клики мышью

Н-ну, попробовать

Выделить код

Код:

panel.focus();

или тот же метод для какого-нибудь элемента внутри панели.


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№1222-01-2010 12:52:31

Elena
Участник
 
Группа: Members
Откуда: Москва
Зарегистрирован: 24-05-2006
Сообщений: 65
UA: Safari 4.0

Re: panel. отображение swf и клики мышью

Infocatcher пишет

Н-ну, попробовать

Выделить код

Код:

panel.focus();

или тот же метод для какого-нибудь элемента внутри панели.

пробовала, не работает вроде.

тогда такой вопрос - хочу попробовать сделать тоже самое, но запихнув флешку в window. но мне нужен доступ к ней из основного кода тубара.как можно организовать прозрачное взаимодействие между разными окнами одного расширения.
И еще такая проблема всплыла - если открывать много окон ff, то в каждом из низ создается своя панель и в нее грузится своя флешка, можно ли как-нибудь сделать так чтобы использовалась одна на все создаваемые окна?

Отсутствует

 

№1322-01-2010 20:16:28

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 3.6

Re: panel. отображение swf и клики мышью

Elena пишет

тогда такой вопрос - хочу попробовать сделать тоже самое, но запихнув флешку в window. но мне нужен доступ к ней из основного кода тубара.как можно организовать прозрачное взаимодействие между разными окнами одного расширения.

Ну, если окно не нужно искать (и если это не компонента, в которой нету глобального объекта window), то все просто:

Выделить код

Код:

var win = window.openDialog("...some.xul", "_blank", "centerscreen,resizable");

А из открытого окна – window.opener

И еще такая проблема всплыла - если открывать много окон ff, то в каждом из низ создается своя панель и в нее грузится своя флешка, можно ли как-нибудь сделать так чтобы использовалась одна на все создаваемые окна?

Тогда лучше и правда отдельное окно. А иначе придется искать окно с уже загруженной флешкой, а при его закрытии подгружать флешку в другом окне (или переносить... вроде, можно).

А для окон есть 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"
    ...

– чтобы можно было открыть только одно окно.


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№1422-01-2010 20:40:01

Elena
Участник
 
Группа: Members
Откуда: Москва
Зарегистрирован: 24-05-2006
Сообщений: 65
UA: Safari 4.0

Re: panel. отображение swf и клики мышью

огромное спасибо за ответ! как окно открыть вроде понятно, как туда передать свою флешку и получать к ней доступ вроде тоже (нашла вот здесь https://developer.mozilla.org/en/Working_with_windows_in_chrome_code)

Infocatcher пишет

А иначе придется искать окно с уже загруженной флешкой, а при его закрытии подгружать флешку в другом окне

проблема в том, что флешка проигрывает музыку, и когда открываешь новое окно ff, создается новая флешка и музыка начинает играть заново вторым экземпляром. Нужно чтобы использовался один экземпляр во всех открытых окнах. Не очень поняла как это можно сделать, и где надо объявить

Выделить код

Код:

var myFlash = document.createElementNS("http://www.w3.org/1999/xhtml", "embed");

чтобы она создавалась один раз и потом только использовалась?

Отсутствует

 

№1523-01-2010 20:26:34

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 3.6

Re: panel. отображение swf и клики мышью

Elena пишет

чтобы она создавалась один раз и потом только использовалась?

https://developer.mozilla.org/En/Workin … ta_sharing
Только, думается, там нигде нету document'а – другой контекст выполнения.
Так что, пожалуй, проще начать с проверки наличия уже запущенного главного окна. И если оно уже открыто, то ничего не делать.

Выделить код

Код:

var mainWin = Components.classes["@mozilla.org/appshell/window-mediator;1"]
    .getService(Components.interfaces.nsIWindowMediator)
    .getMostRecentWindow("navigator:browser");
if(!mainWin)
    return;
...

Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№1625-01-2010 13:52:06

Elena
Участник
 
Группа: Members
Откуда: Москва
Зарегистрирован: 24-05-2006
Сообщений: 65
UA: Safari 4.0

Re: panel. отображение swf и клики мышью

Infocatcher пишет

Так что, пожалуй, проще начать с проверки наличия уже запущенного главного окна. И если оно уже открыто, то ничего не делать.

Спасибо, буду пробовать
я правильно понимаю что в этом случае окошко плеера будет появляться только а одном из открытых окон ff?

Отсутствует

 

№1725-01-2010 14:39:12

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 3.6

Re: panel. отображение swf и клики мышью

Elena пишет

я правильно понимаю что в этом случае окошко плеера будет появляться только а одном из открытых окон ff?

Да, в том, что было открыто первым. Или нужно делать его отдельным окном.


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№1829-01-2010 12:49:56

Elena
Участник
 
Группа: Members
Откуда: Москва
Зарегистрирован: 24-05-2006
Сообщений: 65
UA: Safari 4.0

Re: panel. отображение swf и клики мышью

Infocatcher пишет
Elena пишет

я правильно понимаю что в этом случае окошко плеера будет появляться только а одном из открытых окон ff?

Да, в том, что было открыто первым. Или нужно делать его отдельным окном.

Пытаюсь запихнуть окошко плеера в отдельное окно.
делаю так
в основном файле создаю

Выделить код

Код:

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 12:50:39)

Отсутствует

 

№1929-01-2010 14:06:55

Elena
Участник
 
Группа: Members
Откуда: Москва
Зарегистрирован: 24-05-2006
Сообщений: 65
UA: Safari 4.0

Re: panel. отображение swf и клики мышью

даже если делать так

Выделить код

Код:

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);
},

все равно глухо, что-то у меня уже вообще голова кругом идет... :sick:
как заставить окно показывать флеш?

Отсутствует

 

№2030-01-2010 12:54:14

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 3.6

Re: panel. отображение swf и клики мышью

appendChild(pleer);

Будет искать глобальный метод appendChild, а в объекте window его быть не должно.
В любом случае тут может требоваться вызов document.adoptNode.
Или

Выделить код

Код:

document.documentElement.appendChild( ... )

, или сразу

Выделить код

Код:

<window ... >
    <browser type="content" src="_sp.swf" />
</window>

Ну, и в консоль ошибок полезно заглядывать, там обычно что-нибудь интересное пишет. =) Пригодится javascript.options.showInConsole = true в about:config или Console² (https://developer.mozilla.org/en/Settin … nvironment).

Отредактировано Infocatcher (30-01-2010 12:55:09)


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

№2101-02-2010 12:58:03

Elena
Участник
 
Группа: Members
Откуда: Москва
Зарегистрирован: 24-05-2006
Сообщений: 65
UA: Safari 4.0

Re: panel. отображение swf и клики мышью

Infocatcher пишет
Выделить код

Код:

document.documentElement.appendChild( ... )

,

ага, так работает. спасибо!


Только получается такая штука - я в созданное окно добавляю window.opener.pleer, но при закрытии окна он убивается (музыка перестает играть), несмотря на то что создан в главном окне. я наивно полагала, что если элемент создан в главном окне, то и уничтожатся должен вместе с ним, это не так?
можно все-таки как-то созжать глобальный элемент и обращаться к нему из разных окон? :sick:

Infocatcher пишет

Ну, и в консоль ошибок полезно заглядывать, там обычно что-нибудь интересное пишет. =) Пригодится javascript.options.showInConsole = true в about:config или Console² (https://developer.mozilla.org/en/Settin … nvironment).

В консоль смотрю, но в данном случае там было пусто :)

Отсутствует

 

№2201-02-2010 15:10:03

Infocatcher
Not found
 
Группа: Extensions
Зарегистрирован: 24-05-2007
Сообщений: 4339
UA: Firefox 3.6

Re: panel. отображение swf и клики мышью

Elena пишет

я наивно полагала, что если элемент создан в главном окне, то и уничтожатся должен вместе с ним, это не так?

.appendChild() переносит элемент.

Elena пишет

можно все-таки как-то созжать глобальный элемент и обращаться к нему из разных окон?

По-моему, проще держать его в отдельном окне. А окно это закрывать или при закрытии последнего окна браузера, или пусть само закрывается по Файл – Выход.


Прошлое – это локомотив, который тянет за собой будущее. Бывает, что это прошлое вдобавок чужое. Ты едешь спиной вперед и видишь только то, что уже исчезло. А чтобы сойти с поезда, нужен билет. Ты держишь его в руках. Но кому ты его предъявишь?
Виктор Пелевин. Желтая стрела

Отсутствует

 

Board footer

Powered by PunBB
Modified by Mozilla Russia
Copyright © 2004–2020 Mozilla Russia GitHub mark
Язык отображения форума: [Русский] [English]