I've been working on this for a year or so now. Seems it's a quirk of IE.
My objective is similar to EdGoiga's, passing a variable back to the
calling script using opener.variableName. In my case, the variable is a
pretty big object containing an array of objects - data points x, y, z and
time.
In Chrome, FireFfox and Safari this works as per the book. After the child
window closes, the variable and its value persist in the opener window's
script.
In IE - including the current ver 9, as soon as the child window closes,
the variable in the opener window disappears.
Various posts around the forums suggest that passing a simple variable
works, but it doesn't.
I have got it working, but I don't really understand how, but it's
mind-bogglingly slow.
In my solution, the child script populates the the opener's object. Then
the child script calls a function in the opener which populates another
object defined in the opener from data in the child object using looping
and explicit assignment.
The child window stays open until the function completes (even if I put the
window.close before the call to the parent function which I find odd)
My problem now is that this parent function runs really slowly - 30 seconds
to process 3,000 data points on IE with the CPU at 100%: Chrome et al get
through it in under 1 second. So it would appear that IE is struggling,
perhaps with context switching, and not really setting up the
openervariable in the same context as the opener code. Who knows??
So, I've spent the last couple of days attempting to improve the
performance but to no avail.
Most attempts fail with the error message that is the subject of this
thread!
So, anyone with some creative thoughts would be welcome here.
On Sunday, April 15, 2012 1:43:14 AM UTC+10, Walter Lee Davis wrote:
Can you cut this down to a static HTML example, preferably on jsfiddle or
another service where you can host and edit JavaScript? I have done these
sorts of things before (controlling one window from another) and it's not
impossible. But the sea of random numbers here is making my eyes itch. I
also suspect that in the process of making a two-file static example, you
may find the logical or typo error that is really at fault here.
Walter
On Apr 9, 2012, at 5:04 PM, EdGioja wrote:
I am trying to update the opener page. This works in all browsers but
IE. IE refuses to update and gives me the error:
The callee (server [not server application]) is not available and
disappeared; all connections are invalid
The error occurs on the getinputs line.
Please forgive the random numbers. In my search for an answer, it was
suggested that the variable names weren't unique...so I made them unique.
Removing them doesn't help.
I've seen a number of discussions about .net, but this isn't utilizing
any of that. It is simple code in a ColdFusion environment.
The activatefield and deactivatefield functions have been in use for a
long time and, like I said, it all works in Firefox and Safari.
I would appreciate any help. Here is my code.
script language=javascript
// Display/Edit Button
cfoutput
// Search for buttons on form and update colors
r = Math.floor((Math.random()*100)+1).toString();
this['form' + r ] =
window.opener.document.getElementById(form#form.judgeviewitem#);
this['arr' + r]= $(this['form' + r ]).getInputs('button');
var x = 0;
this['arr' + r].each(function(item) {
name = item.inspect();
// Display/Edit button
if(name.indexOf(DisplayEditOrder) -1) {
var newattribute = background-color:#bgcolor#;;
$(this['arr' + r][x]).writeAttribute(style,
newattribute);
var newattribute = deactivatefield(this,
\'#bgcolor#\');;
$(this['arr' + r][x]).writeAttribute(onmouseout,
newattribute);
$(this['arr' + r][x]).writeAttribute(onblur,
newattribute);
var newattribute = activatefield(this);;
$(this['arr' + r][x]).writeAttribute(onmouseover,
newattribute);
$(this['arr' + r][x]).writeAttribute(onfocus,
newattribute);
var newattribute = #buttoncaption#;
$(this['arr' + r][x]).writeAttribute(value,
newattribute);
}
x++;
});
/cfoutput
// force refresh of DOM activitty
var msie = Microsoft Internet Explorer;
var elementonshow =
window.opener.document.getElementById('DisplayEditOrdercfoutput#form.judgeviewitem#/cfoutput');
var tmp = 0;
if (navigator.appName == msie) {
tmp = elementonshow.parentNode.offsetTop + 'px';
} else {
tmp = elementonshow.offsetTop;
}
/script
--
You