Browsers cut off query strings sent from Flash - html

I need to send a query string from Flash so that it appears in address bar of a browser. Basically, I need to make a Flash version of this HTML code:
link
Seems simple... When I try to do this from Flash the browser cuts off the query string. So instead of getting Portfolio.htm?image=4, I only get Portfolio.htm This is the actionscript I am using:
var url:String = "Portfolio.htm";
var variables:URLVariables = new URLVariables();
variables.image = '4';
var newRequest:URLRequest = new URLRequest(url);
newRequest.data = variables;
newRequest.method = URLRequestMethod.POST;
navigateToURL(newRequest);
This actionscript works great when I click the button from the Flash player. It stops working when I try to put the swf into a HTML wrapper.
The query string image=4 is not going to PHP file. Portfolio.htm uses Javascript to strip the variable from the URL. Most of the questions surrounding this topic deal with PHP files and don't care if the query string appears in the browser address bar.

Try changing the URLRequestMethod to GET instead of POST.
newRequest.method = URLRequestMethod.GET;
Or simply leave it out because GET is the default method.

Related

display only a specific content in AS3 code using webStage View

I'd like to display, in my app, only a part of a web page.
On this website, I'd like to display, in my app, only the div id "MovieCart".
What should I write in my as3 code in order to do so ?
For now, I have this line :
webView.loadURL("http://www.cinecity.nc/Cinecity/Film/40565");
But, of course, it's displaying the fullwebpage.
EDIT
So, I've tried this :
webView.addEventListener(Event.COMPLETE,onComplete);
var res : String = ExternalInterface.call("function(){return document.getElementById('movieCart').outerHTML}");
var urlOfMovie: URLRequest = new URLRequest("http://www.cinecity.nc/Cinecity/Film/40567");
var loaderMovie:URLLoader = new URLLoader();
loaderMovie.load(urlOfMovie);
webView.loadString(res);
But, as it's an AIR app, ExternalInterface.call can't be call. Any idea ?
Here is one easy way you can accomplish this:
//First, load the full page as you're currently doing:
webView.addEventListener(Event.COMPLETE, webLoadComplete); //listen for when the load is finished
webView.loadURL("http://www.cinecity.nc/Cinecity/Film/40565");
//runs when the load finishes
function webLoadComplete(e:Event):void {
webView.removeEventListener(Event.COMPLETE, webLoadComplete); //stop listening
//second, invoke the following Javascript on the page which assigns the `MovieCart` element as the html for the whole document body
webView.loadURL("javascript:document.body.innerHTML = document.getElementById("MovieCart").outerHTML");
}
Disclaimer:
Keep in mind that scrapping content from websites is generally frowned upon and you may be infringing on peoples work/copyrights by doing so.

How to auto load URL through SWF banner in the background?

I am new here just signed up and I did not find information on how to classify this topic on specific section.
I am using adobe flash professional to create a small banner to auto load one of my own URL for analytics. Is this possible? I found one solution on another user's topic which was (AS 3):
var req:URLRequest("http://your_request");
var loader:URLLoader = new URLLoader ();
loader.addEventListener(Event.COMPLETE, onLoadComplete);
loader.load(req);
private function onLoadComplete(ev:Event):void
{
var result:String = ev.target.data;
}
But this doesn't seem to work. How can I test that the full webpage is loaded 'invisibly' in the background? If "http://your_request" has cookies for example, I can check if the cookies were created, but I do not know if with this method I'll load the cookies to check if this is working at the first place.
There is no way to get http-cookies natively. But you can do this with a js-helper-function and an ExternalInterface.call. See this answer: How do I access cookies within Flash?

AS3 POST png to PHP

Have read many similar but no solutions: I'm trying to do something (that i think is) really simple,
Take a photo from gallery or camera - and POST this to a URL. No saving / returning to application. The PNG is just used by the webpage in display and user moves onward.
public function postPicture():void {
PNGEncoder2.level = CompressionLevel.FAST;
var encoder : PNGEncoder2 = PNGEncoder2.encodeAsync(_bitmapData);
encoder.targetFPS = 12;
encoder.addEventListener(Event.COMPLETE, function (e):void {
var png : ByteArray = encoder.png;
var header:URLRequestHeader = new URLRequestHeader("Content-type", "application/octet-stream");
var jpgURLRequest:URLRequest = new URLRequest("https://myurl.com/mypage");
jpgURLRequest.requestHeaders.push(header);
jpgURLRequest.method = URLRequestMethod.POST;
jpgURLRequest.data = png;
navigateToURL(jpgURLRequest, "_blank");
});
}
Also to note, we're getting some odd characters on the end of the URL: C9%90NG
Hunch is that I'm decoding and then not encoding properly before sending i.e. these characters some part of raw image info.
When I test from chrome POST extension with another image, server side stuff works fine so guessing a problem with AS3.
basically its working when I use chrome to browse > my.png and POST it at the page. Am I missing something with the AS3 png encoder? i.e. how to turn that bmpdata into a 'file' rather than an array of bytes.
thankyou
You need to use multipart upload. It's a common situation with a well defined standards for that. You can implement it by yourself but it will take some time and efforts.
What I've used before is the Multipart URLLoader Class provided by Eugene Zatepyakin, one the best Flash guru's out there :)
It's some kind of old but does the job extremely well. You can add variables, files, whatever content you want to your loader and simply submit it. There are examples with the php side of the thing so you can understand what's going on.

Notifications sound Windows Store App

ToastTemplateType toastType = ToastTemplateType.ToastImageAndText02;
XmlDocument toastXML = ToastNotificationManager.GetTemplateContent(toastType);
XmlNodeList toastText = toastXML.GetElementsByTagName("text");
XmlNodeList toastImages = toastXML.GetElementsByTagName("image");
toastText[0].InnerText = "Funny cat";
toastText[1].InnerText = "This cat looks like it's trying to eat your face.";
((XmlElement)toastImages[0]).SetAttribute("src", "ms-appx:///Assets/washer.png");
((XmlElement)toastImages[0]).SetAttribute("alt", "Scary Cat Face");
//This is the options code, which is all optional based on your needs.
IXmlNode toastNode = toastXML.SelectSingleNode("/toast");
((XmlElement)toastNode).SetAttribute("duration", "long");
XmlElement audioNode = toastXML.CreateElement("audio");
audioNode.SetAttribute("src", "ms-appx:///Assets/beep.wav");
//Must be used when looping audio has been selected.
audioNode.SetAttribute("loop", "true");
toastNode.AppendChild(audioNode);
//You can append any text data you would like to the optional
//launch property, but clicking a Toast message should drive
//the user to something contextually relevant.
((XmlElement)toastNode).SetAttribute("launch", "<cat state='angry'><facebite state='true' /></cat>");
ToastNotification toast = new ToastNotification(toastXML);
ToastNotificationManager.CreateToastNotifier().Show(toast);
So I took this code from a webpage and it works but there is a detail. The sound it plays is not the one I want it to play... even if specify the name and assets it looks like it plays some sound from microsoft? Thanks!
Apparently this is a bug in windows 10 and there is no solution to it at the moment.
http://blogs.msdn.com/b/tiles_and_toasts/archive/2015/07/02/adaptive-and-interactive-toast-notifications-for-windows-10.aspx
"...custom audio isn't working. We're investigating this issue. Both
ms-appx and ms-appdata don't work on Desktop, and only ms-appdata work
on Mobile."
Toast notifications can only play a fixed set of system provided sounds - for example, ms-winsoundevent:Notification.Mail. The default sound will be played if a specific sound is not specified, or if an invalid src is provided.
The full list of supported sounds can be found in this documentation on MSDN.

AS3 , Facebook API - Can't retrieve image from event object after image loads

I am getting a mysterious result when trying to load profile images from a logged in Facebook user's friends list into an as3 canvas app. In pretty much every (non-facebook) application I've made where loading an image is required I use the following:
private function loadPic():void
{
var url:String = Facebook.getImageUrl(_friendslistObjectArray[_loadCount].id);
_picLoader = new Loader();
var req:URLRequest = new URLRequest(url);
_picLoader.contentLoaderInfo.addEventListener(Event.COMPLETE, onPicLoaded);
_picLoader.load(req);
}
private function onPicLoaded(evt:Event):void
{
_picLoader.contentLoaderInfo.removeEventListener(Event.COMPLETE, onPicLoaded);
// grab image from loader event to use it
var image = evt.target.content;
trace("this trace won't even show up and the program silently fails unless the line above this is removed");
_loadCount++;
loadPic();
}
I can't retrieve the image from the event object, and I am given no error at all. It all just fails silently. If I remove the line var image = evt.target.content, the process runs through the whole array.
I can't think of any reason this would occur. Furthermore, if I look in firebug's net activity, I see I see the images get loaded as long as I do not have the line I just mentioned included. I just can't seem to get the image data from the event object to add it to stage or a container movieclip.
This should be very easy. I'm racking my brain here trying to figure out what I missed or what is wrong. Any thoughts? Thanks!
Found the answer:
This line:
Security.loadPolicyFile("http://profile.ak.fbcdn.net/crossdomain.xml");
Placed right before _picLoader.load(req); fixes the problem.
It was a crossdomain error, but for some unknown reason the error did not report until I threw var image = evt.target.content; into a try/catch and read the error message.
Props to this post for the answer:
Load profile image from Facebook with Actionscript 3
the evt.target should be a LoaderInfo object, try the code here:
var image = (evt.targe as LoaderInfo).loader.content;