[flex][flash] - problemy z wymogami bezpieczenstwa

0

Witam

Stworzylem aplikacje we flexie <ort>Adoba </ort>gdzie wazne jest wywolanie zewnetrznej funkcji javascript (przez ExternamInterface.call).

Jestem w tej sprawie poczatkujacy i mam problem polegajacy na tym, ze aplikacja ta dziala WYLACZNIE w folderze w ktorym powstala, proba przeniesienia jej gdziekolwiek powoduje blad zabezpieczen i nie wywolanie funkcji javascript. Nie pomaga ustawienie allowscriptaccess na always... Blad tez pojawia sie we flashplayerze 9 i ma zwiazek z tym, ze podkrecili w nim wymogi bezpieczenstwa. Niestety powoduje to szalona sytuacje, gdy aplikacji nie mozna prawktycznie nigdzie uzyc...

POMOCY

0

klepię we fleksie (trójka) od półtora roku i nie napotkałem takiego problemu, a łączę JS z AS bardzo intensywnie.
do użycia ExternalInterface.call potrzebujesz mieć tylko allowScriptAccess (w object i w embed) na always lub domain oraz (tylko pod IE) ustawione id object'u. help podpowiada, że może jeszcze być potrzebne Security.allowDomain(), ale mi nigdy to nie było potrzebne. no i oczywiście użytkownik musi mieć włączony JS.

zauważ, że call rzuca wyjątkami. złap je i wyświetl treść albo użyj debug playera, to będziesz wiedzieć, z czym konkretnie jest problem.

0

Zrobilem malutki programik, guzik, po nacisnieciu ktorego wywoluje alert (javascript). Oto efekt:

SecurityError: Error #2060: Security sandbox violation: ExternalInterface caller file:///D:/testowy/bin-debug/testowy.swf cannot access file:///D:/testowy/bin-debug/testowy.html.
at flash.external::ExternalInterface$/_initJS()
at flash.external::ExternalInterface$/call()
at testowy/wywolaj()[D:\testowy\src\testowy.mxml:9]
at testowy/___testowy_Button1_click()[D:\testowy\src\testowy.mxml:16]

0

poniżej sprawnie działający banalny kod:

<html> <body> <object type="application/x-shockwave-flash" id="grzbrzchrz" width="100" height="80" data="test.swf"> <param name="movie" value="test.swf" /> <param name="wmode" value="opaque" /> <param name="allowScriptAccess" value="always" /> </object> </body> </html> ```
<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml">
	<mx:Button label="!" click="{ExternalInterface.call('alert', event.target.label)}" />
</mx:Application>

czy też jeszcze prościej:

<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" creationComplete="{ExternalInterface.call('alert', '')}"/>

wiesz czym różni się sandbox dla plików lokalnych i sieciowych? wiesz, że nie możesz ich łączyć? wiesz, co to crossdomain.xml i kiedy jest potrzebne? wiesz, że flex w html, który generuje, ustawia allowScripAccess na sameDomain? sprawdziłeś wartość ExternalIntervace.available? upewniłeś się, że allowScriptAccess jest zainicjowane prawidłową wartością?

0

Witam

Dzieki za przyklad - nawiasem mowiac u mnie sie wywala z takim kodem:

SecurityError: Error #2060: Security sandbox violation: ExternalInterface caller file:///D:/test/bin-release/test.swf cannot access file:///D:/test/bin-release/test.html.
	at flash.external::ExternalInterface$/_initJS()
	at flash.external::ExternalInterface$/call()
	at test/___test_Application1_creationComplete()
	at flash.events::EventDispatcher/dispatchEventFunction()
	at flash.events::EventDispatcher/dispatchEvent()
	at mx.core::UIComponent/dispatchEvent()
	at mx.core::UIComponent/set initialized()
	at mx.managers::LayoutManager/doPhasedInstantiation()
	at Function/http://adobe.com/AS3/2006/builtin::apply()
	at mx.core::UIComponent/callLaterDispatcher2()
	at mx.core::UIComponent/callLaterDispatcher()

Jak juz pisalem jestem poczatkujacy w temacie flexa wiec pewnych oczywistych byc moze rzeczy nie wiem. Dokladniej ustosunkowujac sie do tego co napisales:

wiesz czym różni się sandbox dla plików lokalnych i sieciowych?

  • nie mam pojecia, szukalem w googlach i informacje ktore z nich mam sa wzajemnie sprzeczne, niestety nie wiem ktore sa prawdziwe

wiesz, że nie możesz ich łączyć?

  • moge sie domyslac...

wiesz, co to crossdomain.xml i kiedy jest potrzebne?

  • znow z googla conieco wiem ale nie na tyle zeby z tego zrobic samodzielnie uzytek

wiesz, że flex w html, który generuje, ustawia allowScripAccess na sameDomain?

  • tak, zmienilem mu na always

sprawdziłeś wartość ExternalIntervace.available?

  • w moim przykladzie sprawdzalem i wywalal blad

upewniłeś się, że allowScriptAccess jest zainicjowane prawidłową wartością?

  • jesli rozumiem dobrze jak ta prawidlowa wartosc ma wygladac to wydaje mi sie ze tak.

REASUMUJAC: brakuje na sieci a i w dokumentacji FLEXa jasno okreslonych regul, byc moze sa one jasne dla osob, ktore zjadly na temacie zeby, ale ja - bedac zreszta doskonale zorientowany w innych sprawach zwiazanych z serwisami internetowymi itp ale jednoczesnie niezorientowany w temacie flexa, tego nie jestem w stanie wykorzystac tak aby nie bylo bledow... Nawiasem mowiac dla mnie te zabezpieczenia sa przesadne i calkiem nielogiczne, ale moze wlasnie dlatego ze bardzo malo o nich wiem.

Prosze wiec o krotki opis co zrobic zeby problemu nie bylo - nie ukrywam ze mam pilna sprawe do zrobienia, gdzie cala aplikacja swietnie dziala odpalana flexem ale kompletnie nie dziala gdziekolwiek indziej.

0

a takie głupie pytanie (chcę się upewnić) odpalasz to we flash playerze, air, czy w przeglądarce? bo ExternalInterface istnieje tylko w ostatnim przypadku.
uruchamiałeś dokładnie to, co Ci wkleiłem? szczególnie chodzi o html. jeśli nie zadziała z systemu plików (file:/// - u mnie działa), to spróbuj z localhost, jeśli nadal nie będzie działać, wystaw mi gdzieś cały projekt (File->Export->Flex Project Archive albo zip całego katalogu z projektem).

0

odpalam w przegladarce z flashplayerem 9.

Kod po prostu skopiowalem od Ciebie z posta wiec co do jednej literki sie zgadza zarowno flexowy jak i html.

http://propages.pl/test/test.zip

W mojej aplikacji ktora zrobilem stosuje googlemaps api gdzie do javascriptu wysylam wspolrzedne, wszystko niby ladnie pieknie jak daje run, ale potem czy to z lokalnego kompa czy to z docelowego site'u wywala mi taki sam blad...

0

musisz mieć coś nie tak z konfiguracją przeglądarki, bo to co podesłałeś działa zarówno z file:///, http://localhost, http://radiatorus, http://192.168.8.198 (cały url u mnie wygląda np. tak: http://192.168.8.198/projects/multiscreen/MSTVWEB/dev/MultiscreenConsole/bin-debug/test.html); działa pod FP 10 zarówno z IE 8, jak i FF 3.5.

0

Taaa to samo mial znajomy testujac ten problem. Mi wlasciwie chodzi o to zeby zrobiony plik byl uniwersalny i tyle. W koncu nie moge odwiedzajacemu strone powiedziec: pewnie masz cos nie tak z przegladarka :) Ja uzywam firefoxa flashplayer 9 i tak to wyglada. Nic nie ustawialem w firefoxie zebym mogl podejrzewac ze cos jest namieszane...

0

spróbuj jeszcze Security.allowDomain(), ale imho to nic nie zmieni. jeśli osadzasz prawidłowo (prawidłowy allowScriptAccess, zarówno w embed, jak i w param), to nie ma bata, to musi działać. taki mechanizm używam w playerze używanym przez dziesiątki tysięcy osób dziennie i wszystko działa.

0

Cześć

Podsyłam fajny artykuł do poczytania związany z tematem.

Może okaże sie przydatny.

http://flashflex.com/top-security-threats-to-flashflex-applications-and-how-to-avoid-them-part-1/</url>

1 użytkowników online, w tym zalogowanych: 0, gości: 1