I briefly touched on an issue in a previous thread, but since my client's not a fan of launching a plain ol' browser, I'm revisiting the embedded browser concept. And I'm still running into a problem.
Specifically, with www.aa.com.
At first blush, everything loads fine. If you go through the process of checking in to your flight, you'll get a screen that has a button labeled "Print itinerary and receipt." If you click that button, a new window pops up, but instead of your itinerary or boarding pass, you get a message that says something like:
QUOTE: from "American Airlines"
I discovered (quite by accident) that if I have another instance of IE open (with AA loaded), then use my app (with embedded browser), the window opens fine. I'm guessing that there's a session issue with the way the browser gets opened? I have no idea...Assuming that's the case, can I make use of the HTTP plugin to "persuade" the launched window that I am in fact still who I claim to be?
There's no way I know of to replicate this issue without having an American flight to test against, and I'm using data from a co-worker, so I'm unable to give that out so others can test.
But if anything I've written here rings a bell, and if anyone has any suggestions, I'd love to hear them! Thanks!
Oh yeah: be forewarned: I know jack about proxies or whatever, but I'm happy to learn. Thanks again!
Here's a sample browser/fla to mess around with (though it's nothing special):
All right, I'm still running into the same error here. I've written to American's web people, but I'm not holding my breath for a reply.
I've been trying some other things, but I'm getting stuck.
When the user navigates to a section of my kiosk that launches a browser, I'm secretly launching a hidden one via Shell.execute, setting the window state to "hidden." I'm not sure if this will work or not, but another thing I noticed is that when a secondary window gets launched, it's immediately hidden, too, even though I have everything opening in a new (IE) window.
I tried using waitForWindow, but that doesn't work at all, either. (I can either open it blank, or I can open it with the original location passed to the internal browser instance; but clicking on a link that launches a pop-up (e.g., the printable view in Google maps), the "minimized" window gets focus and it has whatever was there originally. Which it shouldn't do at all, since popups are supposed to open in their own windows... *sigh*
Any thoughts? Any idea why American Airlines' site poops its pants when I try to launch a pop-up? Bueller? :(
PS -- The callback is triggering, but the result is always undefined; I've tried setting the timeout to 15 seconds (15000 ms), but still the result is "undefined."
A new observation!
For kicks, I loaded Gmail into ssCore.Browser and, from within a message, clicked "Print." A secondary window popped up -- but it acted like I wasn't logged in!
I'm guessing (based on my exceptionally limited knowledge) that for some reason, sessions aren't persistent across ssCore.Browser and other instances of IE (such as the one that gets launched when you want to print an email from Gmail).
This is a serious problem for me: does anyone have any idea how to maintain a session between ssCore.Browser and a popped-up instance of IE? Am I even barking up the right tree?! I would GREATLY appreciate any help anyone can provide. My client's not happy... :(
PLEASE help. Thanks!
EDIT: All right, after re-reading the help about the HTTP plugin, I'm thinking that through it, I can solve my problems. But I'm not entirely sure what to do with it! Can it work in tandem with the Browser object? (I guess I'll find out!) I'm going to try starting a session by parsing the url that gets passed to the browser object into host and resource (while assuming port 80), then using HTTP.start()...since I'm sure you're all waiting with bated breath, I'll let you know my findings.
EDIT 2: Either I don't know what I'm doing (most likely), or HTTP.start() isn't doing what I want it to do. (Maybe it's not supposed to?) Additionally, Browser.getURL() isn't returning anything other than null -- even after waiting 5 seconds and trying this:
I get "null"
Again, please help!!!
After reading this thread, I'm thinking I might be able to force popups to load into the ssCore.Browser instance instead; the problem, however, is this: when the user clicks on a button that (presumably) contains "window.close()" or some variation thereof, how can I intercept that and issue an ssCore.Browser.back() call instead? Or is that even a valid alternative?
Any suggestions, as always, would be much appreciated. Thanks!
EDIT: *Sigh* So that's apparently not a valid option. I tried printing a google mail e-mail and got a "Grrr! Blah blah pop-up blocker blah blah" alert, so even blocking popups and trying to force-open them in the ssCore.Browser object isn't a viable option. Looks like I'm back to trying to maintain session persistence across browser instances...
I know it's only been a day, but I have to know: Am I completely out of luck here? There has to be a way around this session issue...right? Right? :(
Despite my posting history, I don't mean to come across as a self-important drama queen (oops, too late!)...I just want to know a) if it's possible to get popped-up content to "share" sessions with the page loaded into ssCore.Browser, and b) what I need to do to make it happen.
Again, thanks to anyone who can tell me anything! :(
I'm honestly curious: Am I the only person who's run into this problem?
In case I'm not, and in case it really is an insurmountable obstacle, does anyone here know if it's possible to run a SWF in a browser and have IFRAMEs or something show up on top of the browser, to "fake" the effect of having a browser running within a SWF?
Yes, I realize the above question doesn't relate to SWF Studio, but it's appearing like I'm going to have to forgo it in order to get around this issue.
Thanks for any advice or observations!
As you've no doubt discovered the new window is IE opening up, and the embedded browser is not IE. That's why you're having the session problem: two different browsers, not just another instance of the same browser.
I think we've gone over this in another thread, but have you tried blocking popups and then opening the attempted URL in another browser instance? When using the ActiveX functionality you can open multiple instances of Shell.Explorer. I haven't tested this to see if sessions are kept between these instances, but it's worth a try.
As for IFrames on top of SWFs, yes this is possible. There might be other examples, but Goowy.com had a feature where they would display HTML content above their interface when previewing RSS feeds. I'm not sure if it's something that can be done across all browsers, but if you can dictate one or two, then you're golden.
Derek, thank you for your response!
At one point, I had tried blocking popups, but Google Mail pitched a fit and wouldn't work, so blocking popups and redirecting them might not be enough.
Wait, I just re-read something and it made me think: the browser created/instantiated with ssCore.Browser is not IE? I was under the impression that it was basically a wrapper for IE...though now that I say that, I'm not sure why I thought that...
My other idea (that just came to me) is to try to launch IE through Shell.execute and just use that as my browser. I don't know if that'll work or not, but I might as well give that a shot, too -- unless you know for a fact it won't work :( (Of course, this all depends on being able to run IE in its own kiosk mode to prevent bookmarking, messing with settings, etc...which I think can be done...)
Lots to think about. Again, thanks!
The web browser components that IE is built with are not the same thing as IE. You get a lot of the same functionality, but not everything. IE builds ono the functionality exposed by the web browser components to implement higher functionality (like cookie handling). So ssCore.Browser works like IE, but it's really not IE.
Thanks for the clarification, Tim: I wasn't aware that that's how the browser instance worked!
Now, however (of course!), I've run into some other questions. I can't run the entire thing as a SWF because I also need to be able to do some other stuff that requires EXEs to be launched "inside" (on top of) the main EXE; that said, I was looking at IE's kiosk mode and realized that it gets rid of all of the chrome. Since many people here seem to be much better at digging into the guts of Windows than I am (or really want to be!), does anyone know if there's a way to run IE as a kiosk but with the title bar (and a close button [ideally, I'd like not to have either minimize or restore buttons])?
If anyone has any additional suggestions, I would be thrilled to hear them!
It's possible to launch other applications and modify their window styles (we give you a little taste of that in ssCore.Shell.execute) so it can be done, but most applications don't like it when you mess with them like this. They can reset their window style or size at any time, forcing the calling application to watch for those changes and reapply the desired style changes.
I feel like I'm beating a dead horse with this thread, but I'm desparate to find a way to maintain a session between the embedded browser and IE (for pop-ups). Are there any plans to address this issue, or am I the only one who finds it to be a big deal? I need this capability!
Out of curiosity, what are the reasons for this behavior? I mean, I know that the embedded browser isn't "really" IE (based on above responses to this thread), but is there anyway to either include the session-handling aspects of IE in the embedded browser or..? I'm sure I don't know what I'm talking about, but with this client breathing down my neck, I'm going slowly crazy... :(
Thanks for any help/explanations.
"sessionness" (I just made that up) is something that IE creates and manages. It keeps track of sessions and verifies to the server that this is the same user, based on the session data it keeps. There are a number of different ways IE can track a session.
Another application being able to impersonate that session would make it possible for any other application being able to impersonate any IE session which would effectively render browser security worthless.
This HAS to be an inside job to work. If we used the IE components to create our own browser, with our own session management then it MIGHT work because we could pass that session info to our own popup windows (which would still be part of the same process) or we could redirect popups to the same window. Either way would be better than letting the IE OCX try and handle just half of the job.
This is beyond the scope of what we're doing in SWF Studio but we do have another option. We have another player engine that uses a much more advanced embedded browser, one that we have a LOT more control over. It might be worth giving this solution a test drive to see if we can make it do what you need.
Tim, again, thanks for your response (I feel like such a needy whiner when I post in this thread!).
I'd be interested to learn more about this other player engine you spoke of. Very interested! I'm not sure if it's something you'd discuss in this thread or through e-mail, which is
Thanks very much for your time and attention!