I have built a basic data entry application allowing users to browse external content in iframe and enter data quickly from the same page. One of the data variables is the URL.
Has anyone done anything on the server side? or know of any .Net browser in browser controls. The ultimate goal is to just give the user an easy method of extracting the url of the page they are viewing in the iframe It doesn’t necessarily HAVE to be an iframe, a browser in the browser would be ideal.
I did some tests in Firefox 3 comparing the value of
.documentWindow.location.href in an
iframe. (Note: The
documentWindow is called
contentDocument in Chrome, so instead of
.documentWindow.location.href in Chrome it will be
document.getElementById("myiframe").src = 'http://www.google.com/';
If the user navigates inside the iframe, you can’t anymore access the value of the URL using src. In the previous example, if the user goes away from www.google.com and you do:
You will still get “http://www.google.com“.
documentWindow.location.href is only available if the iframe contains a page in the same domain as the containing window, but if it’s available it always contains the right value for the URL, even if the user navigates in the iframe.
If you try to access
documentWindow.location.href (or anything under
documentWindow) and the iframe is in a page that doesn’t belong to the domain of the containing window, it will raise an exception:
document.getElementById("myiframe").src = 'http://www.google.com/'; alert(document.getElementById("myiframe").documentWindow.location.href); Error: Permission denied to get property Location.href
I have not tested any other browser.
Hope it helps!
You can’t access cross-domain iframe location at all.
I use this.
var iframe = parent.document.getElementById("theiframe"); var innerDoc = iframe.contentDocument || iframe.contentWindow.document; var currentFrame = innerDoc.location.href;
HTA works like a normal windows application.
You write HTML code, and save it as an .hta file.
However, there are, at least, one drawback: The browser can’t open an .hta file; it’s handled as a normal .exe program. So, if you place a link to an .hta onto your web page, it will open a download dialog, asking of you want to open or save the HTA file. If its not a problem for you, you can click “Open” and it will open a new window (that have no toolbars, so no Back button, neither address bar, neither menubar).
I needed to do something very similar to what you want, but instead of
iframes, I used a real
The main page need to be a .hta file; the other should be a normal .htm page (or .php or whatever).
Here’s an example of a HTA page with 2 frames, where the top one have a button and a text field, that contains the second frame URL; the button updates the field:
<html> <head> <title>HTA Example</title> <HTA:APPLICATION id="frames" border="thin" caption="yes" icon="http://www.google.com/favicon.ico" showintaskbar="yes" singleinstance="no" sysmenu="yes" navigable="yes" contextmenu="no" innerborder="no" scroll="auto" scrollflat="yes" selection="yes" windowstate="normal"></HTA:APPLICATION> </head> <frameset rows="60px, *"> <frame src="topo.htm" name="topo" id="topo" application="yes" /> <frame src="http://www.google.com" name="conteudo" id="conteudo" application="yes" /> </frameset> </html>
- There’s an
HTA:APPLICATIONtag that sets some properties to the file; it’s good to have, but it isn’t a must.
- You NEED to place an
application="yes"at the frames’ tags. It says they belongs to the program too and should have access to all data (if you don’t, the frames will still show the error you had before).
- You should notice that I didn’t used any getElement function to fetch the field; on HTA file, all elements that have an ID becomes instantly an object
I hope this help you, and others that get to this question. It solved my problem, that looks like to be the same as you have.
You can found more information here: http://www.irt.org/articles/js191/index.htm
I like your server side idea, even if my proposed implementation of it sounds a little bit ghetto.
You could set the .innerHTML of the iframe to the HTML contents you grab server side. Depending on how you grab this, you will have to pay attention to relative versus absolute paths.
I don’t believe that tracking the current state of the page you are trying to mirror is theoretically possible, but I’m not sure. The site could track all sorts of things server side, you won’t have access to this state. Imagine the case where on a page load a variable is set to a random value server-side, how would you capture this state?
Do these ideas help with anything?
-Brian J. Stinar-
You can use Ra-Ajax and have an iframe wrapped inside e.g. a Window control. Though in general terms I don’t encourage people to use iframes (for anything)
Another alternative is to load the HTML on the server and send it directly into the Window as the content of a Label or something. Check out how this Ajax RSS parser is loading the RSS items in the source which can be downloaded here (Open Source – LGPL)
(Disclaimer; I work with Ra-Ajax…)
Does this help?
I only tested this in firefox, but if you have something like this:
<iframe name='myframe' id='myframe' src='http://www.google.com'></iframe>
You can get its address by using:
Not sure if I understood your question correctly but anyways 🙂
Ok, so in this application, there is an iframe in which the user is supplied with links or some capacity that allows that iframe to browse to some external site. You are then looking to capture the URL to which the user has browsed.
About all you can access is the location, as you need.
Hope this helps.
You can access the src property of the iframe but that will only give you the initially loaded URL. If the user is navigating around in the iframe via you’ll need to use an HTA to solve the security problem.
Check out the link, using an HTA and setting the “application” property of an iframe will allow you to access the document.href property and parse out all of the information you want, including DOM elements and their values if you so choose.