Альтернатива navigatetoURL во Flex 4.5 - не работает
Возможно, вы все знаете о проблеме, возникшей у GoogleChrome и Safari с помощью navigatetoURL. Работает только в IE. Таким образом я собрал следующий код с форума. Код является местом функции javascript в файле html. Затем в Flex есть еще одна функция, которая вызывается при нажатии кнопки. Часть кода здесь:
variables.pmsg1 = xml_langue.msg1;
variables.pmsg2 = xml_langue.msg2;
variables.pmsg3 = xml_langue.msg3;
variables.pmsg4 = xml_langue.msg4;
variables.ppaytomode = parentApp.PAYTOMODE;
var request:URLRequest = new URLRequest(dir_web);
request.data = variables;
request.method = "GET";
//navigateToURL(request,"_blank");
postXMLPageRequest(variables, request.toString(), '_blank'); // HERE I AM CALLING THE FLEX FUNCTION
ФЛЕКС ФУНКЦИЯ НИЖЕ:
открытая функция postXMLPageRequest(data:Object, pageURL:String, window:String=null):void { if (ExternalInterface && ExternalInterface.available) ExternalInterface.call("postXMLPageRequest", pageURL, data.encode().toString(), окно); }
ФУНКЦИЯ JAVASCRIPT (находится в html-файле) НИЖЕ:
функция postXMLPageRequest(url, xmlString, target, method) { method = method || "СООБЩЕНИЕ"; цель = цель || "_Blank";
<% ------------------------------------------------ ----------%> <% - Создать элемент формы с указанными атрибутами. -%> <% -------------------------------------------- --------------%> var form = document.createElement ("форма"); form.setAttribute("action", url); form.setAttribute("метод", метод); form.setAttribute ("цель", цель); form.setAttribute ("ENCTYPE", "text / plain"); form.setAttribute ("style", "display: none");
<% ------------------------------------------------ --------------------%> <% - добавить строку XML в качестве значения для скрытого ввода в форму. -%> <% -------------------------------------------- ------------------------%> var hiddenField = document.createElement ("input"); hiddenField.setAttribute ("type", "hidden"); hiddenField.setAttribute ("name", "'+ xmlString); form.appendChild (hiddenField);
<% -----------------------------------------%> <% - Добавить форму для тела, отправьте ее -%> <% - затем удалите форму из тела. -%> <% -----------------------------------------%> документ.body.appendChild(форма); form.submit(); document.body.removeChild(форма); }
Однако ничего не выполняется, когда я нажимаю кнопку, которая вызывает функцию postXMLPageRequest> Может кто-нибудь помочь мне с этим?
Большое спасибо.
1 ответ
Есть 3 проблемы, которые я вижу сразу. Во-первых, вы вызываете свою функцию flex, используя
postXMLPageRequest(переменные, request.toString(), '_blank');
Несмотря на то, что он расширяет Object, URLRequest на самом деле не имеет метода toString(). request.url - это правильный способ получить строку url.
Во-вторых, у вас есть синтаксическая ошибка в вашем JavaScript. У вас есть двойная кавычка и одна кавычка, а не пара кавычек в
hiddenField.setAttribute("name", "' + xmlString);
В-третьих, в своем обращении к методу flex вы указываете, что хотите выполнить запрос GET. На самом деле вы никогда не передаете строку типа метода в javascript. Если вы хотите сделать get, вам нужно передать "GET" в качестве четвертого параметра вызова ExternalInterface. В противном случае он будет по умолчанию POST.
Надеюсь, это поможет.