Allow user to access link in a pop up iframe

J

jeet_sen

Hi,
I have generated a table and have attached a pop up to display at
onmouseover event of each cell.
For each cell the pop up will display cell specific detailed data. I
have generated the pop up using iframe and it is working fine.
On mouseout event of each cell I have destroyed the created the
iframe.
This is working fine.
But if I try to move the cursor over the iframe, the mouseout event
is fired and my iframe is vanishing off.
Can anyone let me know which event i can attach prior to mouseout
event so that I can access the iframe and click on a link inside the
iframe object.

Regards,
Suvajit
 
M

marss

jeet_sen said:
Hi,
I have generated a table and have attached a pop up to display at
onmouseover event of each cell.
For each cell the pop up will display cell specific detailed data. I
have generated the pop up using iframe and it is working fine.
On mouseout event of each cell I have destroyed the created the
iframe.
This is working fine.
But if I try to move the cursor over the iframe, the mouseout event
is fired and my iframe is vanishing off.
Can anyone let me know which event i can attach prior to mouseout
event so that I can access the iframe and click on a link inside the
iframe object.

Regards,
Suvajit

You can hide popup not immediately but after some delay. I put here
some pseudocode as example:

html:
<td onmouseout="mouseOutCell()" .....

code:
var hidePopupTimeout = null;

function mouseOutCell()
{
hidePopupAfterTimeout();

//f means iframe object
f.contentWindow.document.onmouseover = mouseOverIFrame;
f.contentWindow.document.onmouseout =
hidePopupAfterTimeout;
}

function mouseOverIFrame()
{
if (hidePopupTimeout)
clearTimeout(hidePopupTimeout);
}

function hidePopupAfterTimeout()
{
if (hidePopupTimeout)
clearTimeout(hidePopupTimeout);
hidePopupTimeout = setTimeout("hidePopup()", 500);
}

function hidePopup()
{
//.......
}

Maybe it helps.
 
J

jeet_sen

Hi,
My Iframe contains a link. This link is actually a local text file. I
made this link to call a function openWindow to display the content of
the local file in a new window. My openWindow fucntion looks like this:
function openNewWindow(url)
{
new_window = window.open(url,'Log
details','toolbar=0,menubar=0,resizable=1,dependent=1,status=0,width=400,height=300,left=25,top=25');
}

And my iframe code is as follows:

var contents = document.createElement('IFRAME');
contents.contentDocument.write(msg);
msg = "<BR><span style='color:" + col + "; font-size:11pt'><b>" + name
+ ' : </b><a href=javascript:eek:penWindow("file://' + value + '")>' +
value + '</a></span>';
contents.contentDocument.write(msg);

where value is a valid pathname to a text file.

But everytime I click this hyperlink javascript states : openWindow is
not defined

I defined the openWindowd function in contents.src .i.e detailBox.html

Where I am going wrong?
 
M

marss

jeet_sen wrote:
.....
function openNewWindow(url)
{ .....

var contents = document.createElement('IFRAME');
contents.contentDocument.write(msg);
msg = "<BR><span style='color:" + col + "; font-size:11pt'><b>" + name
+ ' : </b><a href=javascript:eek:penWindow("file://' + value + '")>' +
value + '</a></span>';
contents.contentDocument.write(msg);

where value is a valid pathname to a text file.

But everytime I click this hyperlink javascript states : openWindow is
not defined

I defined the openWindowd function in contents.src .i.e detailBox.html

Where I am going wrong?

Maybe you are simply made a mistake: define function "openNewWindow"
and call "openWindow"?
 
J

jeet_sen

Hi marss,
No I have checked that out. My mail composition had the error.
But can you tell me that whether it is possible to open an new window
from an iframe dynamically.
 
M

marss

jeet_sen said:
My Iframe contains a link. This link is actually a local text file. I
made this link to call a function openWindow to display the content of
the local file in a new window. e to a text file. ......

I defined the openWindowd function in contents.src .i.e detailBox.html

Where I am going wrong?

If you need to load some url in the iframe and add additional elements
after it, you should not use document.write() method because it opens
and clears the document(of course, if the document is not in the
process of being opened and written). The additional elements have to
be added as objects (use document.createElement()).

function loadFrame()
{
var contents = document.createElement('IFRAME');
contents.id="frmId";
contents.src="frame.htm";
document.body.appendChild(contents);
//set delay before element addition
setTimeout("addAdditionalElements()", 50);
}

function addAdditionalElements()
{
var f = document.getElementById("frmId");
var div = f.contentWindow.document.createElement("DIV");
div.innerHTML = "<a
href='javascript:eek:penWindow(\"http://some.html\");'>Click</a>";
f.contentWindow.document.body.appendChild(div);
}

There is an important aspect of referencing a newly created window. IE
tends to race ahead of script execution (presumably to improve
performance). The downside of this feature is that in the case of a
newly created external object, a reference to the new object may not be
valid when the subsequent statements execute in the shadows. To prevent
this race-ahead execution from causing script errors, you need to place
statements referencing the object in a separate function that begins
executing after the current function thread completes. The setTimeout()
method is the mechanism that assists in this task.

Besides, I advise to remove space in a new window name in the
openWindow() function:
new_window = window.open(url,'Logdetails'..
instead of
new_window = window.open(url,'Log details'...
It cause "Invalid argument" error in IE.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,482
Members
44,900
Latest member
Nell636132

Latest Threads

Top