Flash navigationToURL зависает после запуска навигации?

У меня есть флеш-программа на веб-странице, которая пытается опубликовать изображение на веб-странице. Когда пользователь нажимает кнопку, веб-браузер начинает переходить на новую страницу, а затем, кажется, зависает (я вижу, что он начинает переходить на страницу, читая данные о передаче из сообщения в строке состояния Firefox)

Это также работает в отладочной версии, но не в экспортированной версии.

Флэш-код:

var header:URLRequestHeader = new URLRequestHeader("Content-type", "application/octet-stream");
var jpgURLRequest:URLRequest = new URLRequest("http://myurl.com/webcam_upload.php");

jpgURLRequest.requestHeaders.push(header);
jpgURLRequest.method = URLRequestMethod.POST;
jpgURLRequest.data = encodedData;

try
{
    navigateToURL(jpgURLRequest, "_Self");
}
catch(e:Error)
{
    trace("error occured");
}

Страница интернета:

<object width='534' height='450' type='application/x-shockwave-flash' data='flash/photobooth.swf'>
<param name='allowNetworking' value='all'>
<param name='allowScriptAccess' value='always'>
<param name='movie' value='flash/photobooth.swf'>       
<p>My stuff.</p>
</object>

person Steve    schedule 24.06.2011    source источник


Ответы (1)


Вы не хотите «переходить по URL-адресу», поэтому navigationToURL здесь не то, что вам нужно. Что вы хотите сделать, так это вызвать URL-адрес с помощью URLLoader вместе с заголовком и закодированным изображением...

// First create your URL variables — your encodedData
var variables:URLVariables = new URLVariables();
variables.image = encodedData;

// Secondly you need to create a URLRequest, passing the URLVariables and any header you want
var request:URLRequest = new URLRequest ("http://myurl.com/webcam_upload.php");
request.method = URLRequestMethod.POST;
request.data = variables;

// Finally you want to create the URLLoader, calling the URLRequest and listening to any listeners you want, ie COMPLETE...
var loader:URLLoader = new URLLoader();
loader.addEventListener (Event.COMPLETE, _onPostReturn, false, 0, true);
loader.load (request);

private function _onPostReturn(evt:Event):void {

       // This will trace the response upon completion.
       trace ( evt.target.data );

}
person Dimitris    schedule 24.06.2011
comment
Спасибо за совет, но браузер все равно начинает передачу данных и потом просто сидит без перезагрузки веб-страницы. - person Steve; 24.06.2011
comment
Трассировка что-нибудь выводит? .php должен вернуть что-то во flash, чтобы вы могли перенаправить веб-страницу. - person Dimitris; 24.06.2011
comment
Нет, насколько я понимаю, трассировка работает только в режиме отладки. Программа флэш-памяти работает в режиме отладки, но не в «опубликованной» версии. - person Steve; 27.06.2011
comment
Он должен переходить на новую страницу, как если бы вы разместили html-форму. - person Steve; 27.06.2011
comment
Мне удалось заставить его работать :о). Кажется, файл проекта каким-то образом был поврежден. Простое создание нового проекта (с другим именем), а затем копирование и вставка кода, похоже, заставило его работать. - person Steve; 29.06.2011
comment
я рад, что вы нашли решение. - person Dimitris; 29.06.2011