2011-02-10 7 views
6

Po zmianie nazwy domeny, w której hostowana jest aplikacja flash, powinienem zmienić plik crossdomain.xml. Ten plik crossdomain.xml jest hostowany na serwerze api, z którego korzysta aplikacja flash. Widzę, że Flash korzysta z crossdomain.xml z pamięci podręcznej przeglądarki. Czy istnieje jakaś sztuczka, aby flash nie dostał crossdomain.xml z pamięci podręcznej? Może jest jakiś parametr, który mogę przekazać do flashowania podczas jego wywołania w tagu object?crossdomain.xml zapobiega buforowaniu

Odpowiedz

5

Irytująca kwestia - bez wątpienia.

Po pierwsze: lubię buforowanie - o ile mam kontrolę. To jest, w jaki sposób uzyskuję kontrolę nad buforowaniem crossdomain.xml:

Załóżmy, że mamy aplikację flash, która wymaga pewnych danych wejściowych z innego serwera. W moim przypadku mamy ten skonfigurowany jako FlashVar dataSrc=http://www.company.com/data/calendar.xml

Więc błysk szuka www.company.com/crossdomain.xml ... który jest ładowany raz i nie pochodzi z cache przeglądarki użytkownicy dopóki nie wypłukuje go ręcznie.

Rozwiązanie polega na zmianie subdomenę crossdomain.xml ist albumu:

Upewnij się, że na przykład noCache.company.com/ wskazuje company.com za DocumentRoot (!). Flashvar został zmodyfikowany do dataSrc=http://noCache.company.com/data/calendar.xml. W rzeczywistości adresujesz ten sam plik co wcześniej.

Flash poszukuje noCache.company.com/crossdomain.xml, który zostanie pobrany z serwera teraz, ponieważ nie istnieje buforowany plik dla tego pliku URI.

To zależy od twojej fantazji ... jeśli pozwolisz subdomen jak noCache_ {numeric_value}, można łatwo obsługiwać własną TTL poprzez dostęp http://noCache_ {WEEK_OF_YEAR} .company.com/data/calendar.xml ...

Możesz również zwiększyć tę wartość liczbową za każdym razem, gdy zmienił się adres crossdomain.xml.

+0

Tak, rozwiązałem mój problem w podobny sposób. Nadal czekałem na zarządzanie rozwiązaniem z tylko ustawieniami flash. Ale wygląda na to, że albo nie ma rozwiązania wykorzystującego tylko ustawienia lampy błyskowej, albo nikt o tym nie wie. Dlatego akceptuję tę odpowiedź jako działające rozwiązanie. Dzięki. – Dao

+0

Dziękujemy! Wolałbym (popyt?) Także konfigurację flashową. Jest to taki typowy problem ... – HBublitz

-3

Zmusiłbym przeładowanie (F5 lub CTRL/CMD-F5) pliku crossdomain.xml bezpośrednio w przeglądarce, dopóki nie zobaczę, że się zmienia. Wystarczy wpisać URL pliku crossdomain w przeglądarce i kontynuować odświeżanie. Również wyczyściłbym pamięć podręczną przeglądarki.

Powinieneś wypróbować Firefox i firebug, który pokazuje, czy pobrane pliki są buforowane czy nie.

http://getfirebug.com/

Powodzenia Rob

+0

Dzięki za odpowiedź, ale mi nie jest jedynym człowiekiem, który chce zobaczyć miejsce pracy. Jest wielu innych, którzy chcą z niego korzystać. Załóżmy, że nie mogę fizycznie załadować bezpośrednio pliku crossdomain.xml przy użyciu ich przeglądarek). – Dao

0

mogę dołączyć liczb losowych do końca plików xml, jeśli nie chcesz, aby buforować np. var myXMLURL: String = "myXML.xml? r =" + Math.random() * 1000;

Przeglądarka widzi go jako inny plik, np. myXML.xml? r = 645/myXML.xml? r = 239

Nie jestem pewien, czy działałoby to z plikami crossdomain.xml, ale warto spróbować szybko.

+3

Jak rozumiem, pojęcie "crossdomain.xml" jest wywoływane przez wewnętrzne mechanizmy Flasha. Jeśli wiesz, jak wpłynąć na to żądanie i dodać do niego parametry, udostępnij je. – Dao

+3

Flash domyślnie żąda pliku crossdomain.xml u podstawy domeny, ale można go ustawić, wywołując Security.loadPolicyFile (str: String); http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/flash/system/Security.html#loadPolicyFile() –

+1

@ TrevorBoyle: Nie mogłem uzyskać Security.loadPolicyFile(), aby zrobić cokolwiek raz starego wersja crossdomain.xml została już zapisana w pamięci podręcznej, czy jest coś oczywistego, że mogę przeoczyć? –

1

Użyj następujących dyrektyw apache określić politykę buforowania dla pliku:

<Directory /var/www/mysite> 
    <FilesMatch "crossdomain.xml"> 
    Header set Cache-Control "max-age=86400, public, must-revalidate" 
    </FilesMatch> 
</Directory>