To jest moje pierwsze pytanie na Stack Overflow. Nie po raz pierwszy chciałem go napisać, ale zazwyczaj znajduję rozwiązanie za pomocą paska wyszukiwania, tym razem nie. Problem, z którym się zmagam jest trochę skomplikowany, więc postaram się być tak dokładny, jak to tylko możliwe.Flash AS3 - renderuj html przez ExternalInterface
Zasadniczo dodajemy chińskie płatności do istniejącego już e-commerce we Flashu. Cała strona jest w AS3, osadzona za pomocą SWFObject, już używa ExternalInterface do innych rzeczy.
Ta nowa chińska metoda płatności jest nieco staroświecka, więc mają dziwny sposób obsługi płatności. Po wysłaniu POST na ich serwery z wszystkimi szczegółami zamówienia, odpowiadają one na stronie HTML. Mój problem polega na renderowaniu tej strony, biorąc pod uwagę, że otrzymuję ją wewnątrz Flasha.
Rozwiązanie, które próbuję w tej chwili działa częściowo, co oznacza, że jestem w stanie zobaczyć stronę, ale chińskie znaki, które powinny znajdować się na stronie, źle się wyświetlają. Zamiast chińskich znaków widzę dziwne postacie, więc domyślam się, że musi wystąpić problem z kodowaniem, kiedy przekazuję kod HTML z Flasha do Javascript. Jest to, jak ja to robię:
AS3:
//extract html page from response
var newHTML:String = e.currentTarget.data;
//trim whitespace to avoid javascript error
newHTML = newHTML.replace(/\n/g, '');
newHTML = newHTML.split("\r").join("");
if(ExternalInterface.available)
ExternalInterface.call("chinesePayment('"+newHTML+"')");
else
trace("External interface error");
Javascript:
function chinesePayment(param) {
var newWindow = window.open();
//var unescaped = unescape(param);
newWindow.document.write(param);
}
Próbowałem ingerować unescape, ucieczka, URIencoding ale bez powodzenia, tak ja Naprawdę mam nadzieję, że możesz mi pomóc tutaj!
Dzięki, Domenico
EDIT:
Chciałbym tylko wspomnieć, że jestem otrzymania poprawnej strony HTML z ich serwerów. Próbowałem już zapisać stronę lokalnie, kopiując kod HTML bezpośrednio z odpowiedzi serwera i wyświetlenia strony. Oznacza to, że w procesie przekazywania strony z AS3 do Javascript musi być coś nie tak.
EDIT2 ważne:
zdałem sobie sprawę, że problem leży w kodowaniu podręcznego. Kiedy skopiuję kod HTML z wyskakującego okienka, wklej go do edytora i zapisz, mogę poprawnie wyświetlić kod HTML. Wygląda na to, że popup nie uwzględnia kodowania gbk. Teraz szukam rozwiązania tego problemu.
Jeśli zrzucasz te dane za pomocą polecenia FileReference, a następnie otwierasz je jako HTML, czy działa poprawnie w przeglądarce? – Vesper
Nie próbowałem tego, również dlatego, że nie może to być ostateczne rozwiązanie. Widząc, jak ta strona otrzymuje dużo zamówień, chciałbym uniknąć tworzenia statycznych stron dla każdego zamówienia. W każdym razie próbowałem wstawić punkt przerwania w pamięci flash, kopiując kod HTML i wklejając go do edytora. Kiedy zapisałem ten plik, renderowałem go poprawnie, więc html jest w porządku do tego czasu. Spróbuję tego rozwiązania, aby sprawdzić, czy działa, a następnie poinformować, jak to działa. – aberonni
Nie, chodzi mi o sprawdzanie, czy otrzymujesz poprawną stronę HTML i czy ma ona poprawnie ustawione wszystkie metadane i inne rzeczy. Jeśli zostanie poprawnie utworzony w przeglądarce, jeśli zostanie przesłany za pośrednictwem pliku, otrzymasz poprawny kod HTML i będziesz musiał dalej przekopywać się do JS obsługujących łańcuchy HTML - nie mam wiedzy o tym, czy coś może się nie udać w procesie. Jeśli nie, to albo otrzymasz błędny/niekompletny HTML, albo nie masz czcionek w swoim systemie, albo istnieje inna nie-programowa przyczyna obserwowanego zachowania. – Vesper