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

Выделить код

Код:

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

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

По-моему, это должна быть функция 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

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>

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

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

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

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

Выделить код

Код:

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

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

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

Код:

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

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

Выделить код

Код:

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

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

рисую обычную 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>

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

нашла вот что 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>

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

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

Выделить код

Код:

<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?

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

frame_window.wrappedJSObject.function_in_frame()

SunnyDay пишет

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

frame_window.wrappedJSObject.function_in_frame()

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

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

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

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")?

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

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