Hello, I've been trying to find something about why window.opener doesn't work for IE (I'm using 6.0) when I use the window.opener in a separate JavaScript file. It works without any problem when I use Mozilla/Netscape, but not for IE.
The implementations I've seen in my searching for an answer so far, have all been 'in-line' examples how to manage but I haven't found any example yet with separate JavaScript file.
I've got two XHTML documents that are connected to two different JavaScript files:
The first XHTML document:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>Test first window</title>
<meta http-equiv="Content-Type" content="text/xhtml; charset=iso-8859-1" />
</head>
<body>
<h2>Test first window</h2>
<hr />
<div class="left">
<p>
Open a new browser window:
<input id="openNewWindow" type="text" size="55"
value="commsecondwindow.html" />
<input id="button1" type="button" value="Open" />
</p>
<p>
Close the browser window:
<input id="button2" type="button" value="Close" />
</p>
<p id="textString">
</p>
<p id="timeString">
</p>
<p id="testString">
</p>
</div>
<script type="text/javascript" src="commfirstwindow.js"></script>
<noscript><p>Your browser does not support javascript.</p></noscript>
</body>
</html>
...and the javascript for it:
// For IE4+
ie=(document.all)?true:false;
// For Mozilla
dom=((document.getElementById) && (!ie))?true:false;
function setEventByID(id, ev, fu) {
if (dom) {
document.getElementById(id).addEventListener(ev, fu, false);
}
if (ie) {
document.getElementById(id).attachEvent('on' + ev, fu);
}
}
var newWindow;
function openNewWindow() {
var url=document.getElementById('openNewWindow').value;
newWindow=window.open(url, 'newWindow', '', '');
newWindow.creator=self;
}
setEventByID('button1', 'click', openNewWindow);
// Close the new window
function closeWindow() {
if (newWindow!=null) {
newWindow.close();
}
}
setEventByID('button2', 'click', closeWindow);
The second XHTML document:
<?xml version="1.0" encoding="ISO-8859-1"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>Test second window</title>
<meta http-equiv="Content-Type" content="text/xhtml; charset=iso-8859-1" />
</head>
<body>
<h2>Test second window</h2>
<hr />
<div class="left">
<p>
Send a text to the main window:
<input id="testText" type="text" size="55"
value="This is a test text for the main window!" />
<input id="button3" type="button" value="Send text" />
</p>
</div>
<script type="text/javascript" src="commsecondwindow.js"></script>
<noscript><p>Your browser does not support javascript.</p></noscript>
</body>
</html>
...and the javascript code:
// For IE4+
ie=(document.all)?true:false;
// For Mozilla
dom=((document.getElementById) && (!ie))?true:false;
function setEventById(id, ev, fu) {
if (dom) {
document.getElementById(id).addEventListener(ev, fu, false);
}
if (ie) {
document.getElementById(id).attachEvent('on' + ev, fu);
}
}
// Global variables
var initialString="Testing to insert text into main window...";
var initialTextNode=document.createTextNode(initialString);
var timeNode;
var testNode;
window.opener.document.getElementById('textString').appendChild(initialTextNode);
function currentTime() {
var today=new Date();
if (timeNode==null) {
timeNode=document.createTextNode(today.toLocaleTimeString());
window.opener.document.getElementById('timeString').appendChild(timeNode);
}
else {
window.opener.document.getElementById('timeString').removeChild(timeNode);
timeNode=document.createTextNode(today.toLocaleTimeString());
window.opener.document.getElementById('timeString').appendChild(timeNode);
}
}
window.setInterval(currentTime, 1000);
function sendTestText() {
var testTheString=document.getElementById('testText').value;
testNode=document.createTextNode(testTheString);
window.opener.document.getElementById('testString').appendChild(testNode);
}
setEventById('button3', 'click', sendTestText);
Does anyone know why the above works well with Mozilla/Netscape but doesn't work with IE? Am I doing something wrong in the code?
/Soo-Im