Po wywołaniu usługi WWW muszę wywołać FileReference.save(), ale ta metoda ma ograniczenie: "W programie Flash Player można wywoływać tę metodę tylko w odpowiedzi na zdarzenie użytkownika (na przykład w obsługa zdarzeń dla kliknięcia myszą lub zdarzenia typu keypress). W przeciwnym razie wywołanie tej metody spowoduje, że Flash Player rzuci wyjątek błędu. " (z dokumentacji here)Funkcja FileReference.save() Flexa może być wywołana tylko w procedurze obsługi zdarzeń użytkownika - jak mogę obejść ten problem?
To ograniczenie jest nieco niejasne. Czy to znaczy, że mogę wywołać tylko metodę FileReference.save() z funkcji obsługi zdarzeń, która jest zarejestrowana jako detektor dla określonych typów zdarzeń użytkownika? Jeśli tak, to jakie dokładnie zdarzenia użytkowników są prawidłowe? (Być może jest zdarzenie, które nigdy nie zostanie wysłane przez interakcję użytkownika z moją aplikacją i mógłbym zarejestrować funkcję obsługi zdarzeń dla tego typu zdarzenia i wykonać wywołanie save() z tej funkcji?)
Moja trudność polega na tym, że nie można bezpiecznie wywołać metody FileReference.save(), dopóki moja usługa sieciowa nie zwróci danych, które będą używane jako argument wywołania metody FileReference.save(), więc zdarzenie wywołujące wywołanie FileReference.save() jest w rzeczywistości wynik ResultEvent, a nie zdarzenie użytkownika, i nie jestem pewien, czy wysłać nowy (faux) typ zdarzenia użytkownika, aby wywołać wywołanie FileReference.save(), chyba że jest to definitywnie zdarzenie użytkownika, które nigdy nie zostanie wysłane jako wynik rzeczywistej interakcji użytkownika z moją aplikacją.
W skrócie, co robię teraz jest to: Mam funkcję zarejestrowaną jako program obsługi dla kliknięcia przycisku. W tej funkcji wykonuję moje zgłoszenie serwisowe do pobierania danych z serwera. Mam również funkcję obsługi wyników, która jest wywoływana po zakończeniu wywołania usługi sieci Web, i tutaj chcę wywołać metodę FileReference.save(), ponieważ w tym momencie wiem, że dane są gotowe do zapisania w plik. Jednak wspomniane ograniczenie blokuje mnie od robienia tego - pojawia się błąd:
Error #2176: Certain actions, such as those that display a pop-up window,
may only be invoked upon user interaction, for example by a mouse click
or button press.
próbowałam wielu rzeczy, aby obejść ten problem, takich jak tworzenie drugie kliknięcie myszy funkcję obsługi zdarzenia z FileReference.save () zadzwonić i wywołać go po upływie limitu czasu (aby czas usługi sieciowej się zakończył), ale ciągle mam ten sam błąd - może to nie działa, ponieważ druga funkcja nie jest zarejestrowana jako detektor zdarzeń dla typu zdarzenia używanego jako jego argument.
Jestem nowy w rozwoju Flex, więc może po prostu nie myślę o tym we właściwy sposób. Jeśli ktokolwiek może zaproponować inne podejście, naprawdę to doceniam. Z góry dziękuję za komentarze i sugestie.
--James
To jest dokładne. Aplikacje Flash oparte na przeglądarce powinny przestrzegać normalnych zasad środowiska sandbox przeglądarki. Inną opcją byłoby użycie środowiska Adobe AIR, które wychodzi poza obszar izolowany przeglądarki (ale wymaga użytkownika, aby zainstalować aplikację). –