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

Список ответов на каверзные вопросы можно получить в FAQ-разделе форума.

№110-02-2010 12:32:03

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

Взаимодействие Flash и расширения

Добрый день! :)
Нужна помощь страших товарищей.
Есть окошко

Выделить код

Код:

<window id="music_window"  
    xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
    onload="music.init()"
    <script type="application/x-javascript" src="chrome://toolbar/content/music_window.js" />
    <browser id="music_pleer_id" src="http://myserver.ru/player.swf" width="320" height="300" type="content" />
</window>

В нем показывается флеш.
Флеш посылает сигналы о своем состоянии

Выделить код

Код:

ExternalInterface.call("gotourl", "url", "auth")

Эти сигналы надо ловить в расширении и на них реагировать.
Пытаюсь делать так:
в music_window.js

Выделить код

Код:

function gotourl(command, arg){
        dump("!!!gotour!!!"+arg+"\n");
}

но оно не хочет работать.
Что и где забыла прописать?

Отсутствует

 

№210-02-2010 18:12:27

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

Re: Взаимодействие Flash и расширения

По-моему, это должна быть функция browser.contentWindow.gotourl – в том же контексте, что и *.swf.

В общем случае, наверное, что-то вроде того, что сделано в Stylish:

Выделить код

Код:

var stylishCommon = {
    ...
    dispatchEvent: function(doc, type) {
        if (!doc) {
            return;
        }
        var stylishEvent = doc.createEvent("Events");
        stylishEvent.initEvent(type, false, false, doc.defaultView, null);
        doc.dispatchEvent(stylishEvent);
    },
    ...
};

stylishCommon.dispatchEvent(doc, "styleLoadCode");

То есть на уровне странице генерируются события, а расширение их ловит. Или наоборот.

https://developer.mozilla.org/en/Code_s … eged_pages


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

Отсутствует

 

№310-02-2010 18:32:14

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

Re: Взаимодействие Flash и расширения

Infocatcher пишет

По-моему, это должна быть функция browser.contentWindow.gotourl – в том же контексте, что и *.swf.

а у меня получается в другом?

вообще, читала вот этот документ http://flash-ripper.com/articles/flash/ … erface.php
единственное подозрение из-за чего может не работать - то что я встариваю флеш через browser, а надо через embed.
Но когда пытаюсь рисовать такое окно

Выделить код

Код:

<window id="music_window"  
    xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
    onload="music.init()"
    <script type="application/x-javascript" src="chrome://toolbar/content/music_window.js" />
    <embed id="music_pleer_id" src="http://myserver/iplayer_sp.swf" width="320" height="300" type="application/x-shockwave-flash" name="musicpleername" pluginspage="http://www.adobe.com/go/getflashplayer" />
</window>

то флешка не показывается

Отсутствует

 

№410-02-2010 18:38:16

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

Re: Взаимодействие Flash и расширения

а у меня получается в другом?

Из <browser type="content"> нельзя увидеть привилегированный код, подключенный «снаружи».

то флешка не показывается

Выделить код

Код:

<embed xmlns="http://www.w3.org/1999/xhtml"

Или <object>... или другое пространство имен. Но только если это «доверенная» флешка. =) А иначе нужно ее как content добавлять – чтобы без лишних привилегий.


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

Отсутствует

 

№510-02-2010 19:21:10

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

Re: Взаимодействие Flash и расширения

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

Код:

<embed xmlns="http://www.w3.org/1999/xhtml"

Вот спасибо! не заметила по невнимательности :)
теперь

Выделить код

Код:

function musicpleername_DoFSCommand(command, args){
        dump("1FSCommand\n");
}

вот такая штука работает, но gotourl все равно не ловится

Отсутствует

 

№616-02-2010 20:28:42

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

Re: Взаимодействие Flash и расширения

рисую обычную html страничку

Выделить код

Код:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=koi8-r" />
<script>
    function gotourl(arg, arg1, arg2){
        alert("gotourl!!!");
    }

    </script>
<noscript>
    <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="320" height="270" id="player" align="middle">
    <param name="allowScriptAccess" value="sameDomain" />
    <param name="allowFullScreen" value="false" />
    <param name="movie" value="iplayer.swf" /><param name="quality" value="high" /><param name="bgcolor" value="#ffffff" />    <embed src="iplayer.swf
" quality="high" bgcolor="#ffffff" width="320" height="270" name="player" align="middle" allowScriptAccess="sameDomain" allowFullScreen="false" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer" />
    </object>
</noscript>

</body>
</html>

все отлично работает,gotourl вызывается.
Пытаюсь сделать тоже самое в расширении

Выделить код

Код:

<window id="music_window"  
    xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
    width="320" 
    height="300"
    hidechrome="true"
    windowtype="music_window_type"
    <script type="application/x-javascript" src="chrome://toolbar/content/window.js" />
    
    <script language="JavaScript" type="text/javascript">
        function gotourl(arg, arg1, arg2){
            alert("gotourl!!!");
    }

    </script>
    
    <object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="320" height="270" id="player" align="middle">
    <param name="allowScriptAccess" value="sameDomain" />
    <param name="allowFullScreen" value="false" />
    <param name="movie" value="iplayer.swf" /><param name="quality" value="high" /><param name="bgcolor" value="#ffffff" />    <embed id="player" xmlns="http://www.w3.org/1999/xhtml" src="player.swf" width="320" height="300" type="application/x-shockwave-flash" name="musicpleername" pluginspage="http://www.adobe.com/go/getflashplayer" allowScriptAccess="sameDomain" allowFullScreen="false"/>
    </object>
    
        
</window>

работать не хочет. в чем может быть дело? какие-нибудь настройки или что-то еще?

Отредактировано Elena (16-02-2010 20:29:19)

Отсутствует

 

№717-02-2010 09:31:39

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

Re: Взаимодействие Flash и расширения

нашла вот что http://forums.mozillazine.org/viewtopic … 9&t=781475
c учетом этого пробую писать вот так

Выделить код

Код:

<window id="music_window"  
    xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
    width="320" 
    height="300"
    hidechrome="true"
    windowtype="window_type"
    <iframe type="content" id="mp" src="player.swf" width="320" height="300">
    <script language="JavaScript" type="application/x-javascript">
            function gotourl(arg, arg1, arg2){
                dump("gotourl!!!");
        }
    </script>
    </iframe>
    <script type="application/x-javascript" src="chrome://toolbar/content/music_window.js" />
</window>

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

Отсутствует

 

№818-02-2010 23:23:42

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

Re: Взаимодействие Flash и расширения

в результате получилась такая конструкция

Выделить код

Код:

<window id="music_window"  
    xmlns="http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul"
    xmlns:html="http://www.w3.org/1999/xhtml"
    width="320" 
    height="300"
    <iframe type="content" id="music_pleer" name="music_pleer" src="chrome://toolbar/locale/player.html" width="320" height="300"/>
    <script type="application/x-javascript" src="chrome://toolbar/content/music_window.js" />
</window>

в player.html есть такая штука

Выделить код

Код:

function callExternalInterface(){
    dump("set pause\n");
}

а в music_window.js пытаюсь сделать селедующее

function cookie_updater(){
    var pleer=document.getElementById('music_pleer').contentWindow.document;
    pleer.callExternalInterface2();

}

но функция callExternalInterface2(); не вызывается. При этом в другом месте получаю доступ к флешу

var pleer=document.getElementById('music_pleer');
dump(pleer+"\n");
pleer.contentWindow.document.addEventListener('gotourl_event', function(e) { gotourl(e); }, false, true);

как из javascript получить доступ к функции которая описано внутри iframe?

Отсутствует

 

№916-03-2010 04:04:22

SunnyDay
Участник
 
Группа: Members
Зарегистрирован: 09-07-2009
Сообщений: 44
UA: Firefox 3.6

Re: Взаимодействие Flash и расширения

>как из javascript получить доступ к функции которая описано внутри iframe

frame_window.wrappedJSObject.function_in_frame()

Отсутствует

 

№1016-03-2010 09:35:02

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

Re: Взаимодействие Flash и расширения

SunnyDay пишет

>как из javascript получить доступ к функции которая описано внутри iframe

frame_window.wrappedJSObject.function_in_frame()

Спасибо большое! попробую так.

Еще возник такой вопрос - видимо параметры безопасности блокируют взаимодействие флешки и расширения.
т.е. если сюда http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html  добавить каталог в который установилось расширения то все работает нормально, если нет - то события из флешки в расширение не доходят.
Можно ли как-то сделать так чтобы не надо было добавалять каталог в доверенные? может быть на стороне флешки?  а то заставлять каждого пользователя лезть куда-то не очень хорошо...

Отсутствует

 

№1117-03-2010 03:01:28

SunnyDay
Участник
 
Группа: Members
Зарегистрирован: 09-07-2009
Сообщений: 44
UA: Firefox 3.6

Re: Взаимодействие Flash и расширения

Elena
Советую почитать про снятие ограничений безопасности через XPCOM)
http://www.intuit.ru/department/se/mozilla/16/10.html

Отсутствует

 

№1217-03-2010 15:07:03

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

Re: Взаимодействие Flash и расширения

SunnyDay пишет

Elena
Советую почитать про снятие ограничений безопасности через XPCOM)
http://www.intuit.ru/department/se/mozilla/16/10.html

спасибо за ссылку! а не подскажите, в случае с флешкой, которая внутри html документа, который внутри frame
какие должны быть параметры Iface и Prop для
user_pref("capabilities.policy.mypol.Iface.Prop","Keywords")?

Отсутствует

 

№1302-02-2011 13:15:25

easy_me
Участник
 
Группа: Members
Зарегистрирован: 25-12-2010
Сообщений: 4
UA: Safari 5.0

Re: Взаимодействие Flash и расширения

решили в итоге ? я столкнулся с такой же проблемой !  FSCommand и ExternalInterface через добавление сюда http://www.macromedia.com/support/documentation/en/flashplayer/help/settings_manager04.html работают

у меня флешка вставляется в расширение через embed ( не в iFrame )

Отредактировано easy_me (02-02-2011 13:23:36)

Отсутствует

 

Board footer

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