Перекодировать Flex URLRequest и эмуляцию формы navigationToURL в Royale JS

У меня есть куча страниц Flex, которые мне нужно преобразовать, чтобы избавиться от флеш-плеера, и я не смог увидеть, как воспроизвести этот код, просто используя javascript.

Код Flex собирает данные и отправляет их методом POST на страницу Cold Fusion в другом фрейме (с именем FrameData). Cold Fusion получает доступ к данным из переменной FORM (FORM.mydata1, FORM.mydata2 и т. д.).

var RequestSite:URLRequest;

OutputPageValues.OutputType = 5;
OutputPageValues.mydata1 = "2";
OutputPageValues.mydata2 = "test";

RequestSite = new URLRequest("pageurl.cfm"));
RequestSite.data = OutputPageValues;
RequestSite.method = URLRequestMethod.POST;

navigateToURL(RequestSite, 'FrameData');

Как мне эмулировать эту конструкцию в Royale? Есть ли другой способ сделать это?


person wrkoch    schedule 23.08.2020    source источник


Ответы (1)


эквивалентный код для URLRequest:

var u:URLRequest = new URLRequest("http://domain.foo");
navigateToURL(u,"_blank");

в Apache Royale это BrowserWindow:

import org.apache.royale.core.BrowserWindow;

var u:String = "http://domain.foo";
BrowserWindow.open(u, "_blank");

Для передачи переменных нужно сделать через GETметод: "http://domain.foo?variable=" + key.

Чтобы использовать метод POST, вместо этого используйте класс HTTPService из Network SWC:

import org.apache.royale.net.HTTPConstants;
import org.apache.royale.net.HTTPService;
import org.apache.royale.net.URLVariables;

// add the variables to send
var urlVars:URLVariables = new URLVariables();
urlVars.set("variable", key);

// create the httpservice instance
var service:HTTPService = new HTTPService();
service.url = "http://domain.foo";
service.method = HTTPConstants.POST;
service.addEventListener("complete", resultCallback);
service.addEventListener("ioError", faultCallback);

// add the variables
service.contentData = urlVars;

// trigger the service
service.send();

При желании, если вам нужно иметь дело с CORS, вы можете добавить CORSCredentialsBead шарик к HTTPService:

service.addBead(new CORSCredentialsBead(true));

(Примечание: код не тестировался, сообщите, если все в порядке, чтобы мы могли улучшить этот ответ и фрагмент кода, спасибо)

person Carlos Rovira    schedule 24.08.2020
comment
Как получить запрос HTTPService для POST в кадр? - person wrkoch; 24.08.2020
comment
Извините, не понимаю, что вы имеете в виду под POST для фрейма. - person Carlos Rovira; 25.08.2020
comment
в коде, который я использую, naviagateToURL отправляет переменные URLRequest в именованный фрейм. Я понимаю, что BrowserWindow делает это, но мне нужны и переменные. Что мне нужно знать, так это то, как направить HTTPService на именованный фрейм - person wrkoch; 25.08.2020
comment
HTTPService не работает как navigationToURL/BrowserWindow. HTTPService имеет полное событие (определенное в коде ответа), поэтому, когда вы получаете ответ, вы можете обработать результат в функции обратного вызова и делать с ним все, что хотите. Если у вас есть js:IFrame (например) внутри вашего приложения Royale, вы можете передать результат. Но, возможно, вы хотите добавить HTTPService на новую страницу Royale и вызвать оттуда, а затем обработать внутри. - person Carlos Rovira; 26.08.2020
comment
Мы используем фреймы HTML со страницей Cold Fusion в целевом фрейме для отображения данных. Я удивлен, что нет возможности отправить данные FORM. Знаете ли вы, можно ли изменить BrowserWindow для передачи данных формы (нельзя использовать строковые переменные URL) или другой метод для передачи данных в цель? - person wrkoch; 27.08.2020