Javascript Pop-Up WIndow Open Function - asp.net

I am using the following JS function to open a pop-up window to display another website:
<script language="javascript" type="text/javascript">
function link()
{
window.open("www.google.com")
}
onClick="Link()"
The URL in the above example is just for testing. I actually intend on replacing the URL with a text value from a listbox, which is in the form of a URL. Anyway, when ever I start the debugger in Visual Studio, and execute the onClick, the pop-up window opens and gives me a page stating that there is a server error. Specifically, Server error in '/' application... resource cannot be found. Also, I notice that my URL is placed as follows: http://localhost:49456/www.google.com. I thought this function would give me a pop-up window with Google as the website. Is this a Visual Studio debugger issue, is my code wrong, or am I using the code in the wrong context? Any suggestions would be greatly appreciated.

you need to specify http:// in the url eg
window.open("http://google.com");
without that protocol specified, the browser will think the URL is relative to the current document.

Add http:// to your domain, i.e. http://www.google.com.

Related

IFRAME src different from the url actually loaded

This is my first question. There is an IFRAME. When I checked the src, it showing some blank.html file. I am unable to read the controls from this. While I am using the F12 option, it was showing some error in a JSP file with the name. Accidently when I right clicked the ie window, this file name was available in the frequently opened files. But this url of the JSP file was not shown anywhere in the code. WHen I tried opening this url while having the original ie session, it is opening and I am able to read the controls.
Is it possible to read the controls on the same frame, without opening in another window. How to read the url opened in the iframe.
Its better if you could also paste your code.
Nevertheless check this.
<iframe id="ifrm" src="demo.html" onload="doSomething()"></iframe>
<script type="text/javascript">
document.getElementById('ifrm').onload = function() {
// put your code here
}
</script>
I have found out the reason. For iframes, we need to use iframe.contentwindow.document instead of just iframe.document.

HTA Script Errors

I've made a HTA that just links to a website and once you're there you can navigate through several different pages. It's not an application that can change or access anything on the computer.
My problem is when I try to put a frame or an iframe in a page with an external website inside this frame, script errors keep popping up. When I view these same webpages on Internet Explorer 9, no errors show up.
Error Example:
http://i39.tinypic.com/keyfs4.gif
I know HTAs can access the files on a computer and have higher privileges and security over normal pages that are viewed in a browser. Is this the reason script errors show up when on a HTA?
Is there any way I can stop these errors coming up?
Your script has errors. You need to fix them.
The difference is, the Web Browsers a HTML with script errors are less likely to show all script errors. The usual symptom is your script does not run correctly but you're not given any indication as to why.
As a HTA, your same script errors will display as a dialog box. This will tell you why your scripts do not run correctly.
As a personal rule, I generally prefer to code first in HTA so that I can locate and fix errors before deploying them as HTML.
Take the following code example. As a HTA when you click on the Test button it will correctly show "Begin" then it will correctly report your script has a Division by Zero error. As a HTML, in Internet Explorer, the test button will just show "Begin" and then it will abort without giving you any indication why.
<html>
<head>
<title>test</title>
<script language="VBScript">
Sub btnTest_onClick
MsgBox "Begin"
MsgBox 100 / 0
MsgBox "End"
End Sub
</script>
</head>
<body>
Click on this button: <input type="button" id="btnTest" value="Test"/>
</body>
</html>
#BicycleDude - the errors are not located within #user990175's code but within the external website he is loading into an iframe. So he can't really control the errors that are thrown in 3rd party code.
#user990175 - the issue you're seeing is a result of the third party code using htc's which I'm 90% sure are not supported in hta's, or have special considerations anyway. Either way you should be able to disable error notifications via the error prompt itself or under Tools > Options > Advanced tab > Browsing section > Dispaly a notification about every script error.
That doesn't mean the functionality will magically work, it just means you won't be prompted with the pesky dialog box.

Permission Denied error in IE6 Start of JavaScript tag in .aspx

for some reason, I get "Permission Denied" for line 20 in my .aspx when trying to view it from our dev server. Line 20 is simply the start of the JavaScript tag:
<script type="text/javascript">
// variables
var firstProductID;
var lastProductID;
var getProductIDs = new Array();
...
Are you trying to do an xhr (ajax) request to another domain?
Turn on script debugging in ie, reload the page and when you hit this error it will ask if you want to debug. You can debug in visual studio or ie debugger tools (if you have ie8) and youll see the exact script causing the issue.
The line numbering in the error is never what it seems due to included js libs etc.
Line numbers can be very misleasing if you are trying to match up the line number IE gives you with the line number in the ASPX file (because ASP.NET can produce HTML that you won't see in the ASPX source view).
If you do a View Source in IE6 is line 20 still the start of your script tag?
You have a SCRIPT tag with a SRC attribute that is pointed to a file that does not exist.
Check your path.

getting up to date contents of an iFrame

Is it possible to get up to date contents from an iframe? Lemme explain the problem I am encountering:
function modify_iframe(url){
my_iframe.src = url;
iframe_content = my_iframe.contentDocument;
//....code to modify the content goes here,,,,
}
The first time I call modify_iframe(url_a) it sets the source as I would expect but the iframe_content is a blank document.
The second time I run modify_iframe(url_b) it sets the source as I would expect but the iframe_content is actually that of url_a.
So it seems that contentDocument is not returning the contents of the new source, but rather the source before it was changed. Anyone know why that is and if there is a way around it?
Additional background info: We have been adding an event listener to fire off on the iframe load event which occurs when the src is changed. This was giving us the contents when calling contentDocument; however, users were being prompted that our site had unauthenticated content even though we use https for everything including the src. After removing the event listener we no longer receive the unauthenticated content warning, but the contentDocument of our iframe is always one step behind as described above.
Um, first try using a setTimeout to wait for the page content to load. But that's not a nice solution. What browser are you testing on? If it were me I would try to get to the bottom of the "unauthenticated content" error prompt.

How do I get the current location of an iframe?

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.
Ideally I would like to be able to load the iframes current url into a textbox with javascript. I realize now that this is not going to happen due to security issues.
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.
Thanks,
Adam
I did some tests in Firefox 3 comparing the value of .src and .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 .contentDocument.location.href.)
src is always the last URL that was loaded in the iframe without user interaction. I.e., it contains the first value for the URL, or the last value you set up with Javascript from the containing window doing:
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:
alert(document.getElementById("myiframe").src);
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!
document.getElementById('iframeID').contentWindow.location.href
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 frameset.
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:
frameset.hta
<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:APPLICATION tag 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).
topo.htm
<html>
<head>
<title>Topo</title>
<script type="text/javascript">
function copia_url() {
campo.value = parent.conteudo.location;
}
</script>
</head>
<body style="background: lightBlue;" onload="copia_url()">
<input type="button" value="Copiar URL" onclick="copia_url()" />
<input type="text" size="120" id="campo" />
</body>
</html>
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
Enjoy =]
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.
Plus, depending on how the page you are grabbing interacts with other pages, this could totally not work (cookies being set for the page you are grabbing won't work across domains, maybe state is being tracked in Javascript... Lots of reasons this might not work.)
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-
Does this help?
http://www.quirksmode.org/js/iframe.html
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:
document.getElementById('myframe').src
Not sure if I understood your question correctly but anyways :)
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...)
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.
Something to keep in mind. Since the URL is to an external source, you will be limited in how much you can interact with this iframe via javascript (or an client side access for that matter), this is known as browser cross-domain security, as apparently you have discovered. There are clever work arounds, as presented here Cross-domain, cross-frame Javascript, although I do not think this work around applies in this case.
About all you can access is the location, as you need.
I would suggest making the code presented more resilitant and less error prone. Try browsing the web sometime with IE or FF configured to show javascript errors. You will be surprised just how many javascript errors are thrown, largely because there is a lot of error prone javascript out there, which just continues to proliferate.
This solution assumes that the iframe in question is the same "window" context where you are running the javascript. (Meaning, it is not embedded within another frame or iframe, in which case, the javascript code gets more involved, and you likely need to recursively search through the window hierarchy.)
<iframe name='frmExternal' id='frmExternal' src='http://www.stackoverflow.com'></frame>
<input type='text' id='txtUrl' />
<input type='button' id='btnGetUrl' value='Get URL' onclick='GetIFrameUrl();' />
<script language='javascript' type='text/javascript'>
function GetIFrameUrl()
{
if (!document.getElementById)
{
return;
}
var frm = document.getElementById("frmExternal");
var txt = document.getElementById("txtUrl");
if (frm == null || txt == null)
{
// not great user feedback but slightly better than obnoxious script errors
alert("There was a problem with this page, please refresh.");
return;
}
txt.value = frm.src;
}
</script>
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.
http://msdn.microsoft.com/en-us/library/ms536474(VS.85).aspx
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.

Resources