A piece of JavaScript on one of our pages gives an access denied error.
In itself nothing strange, it's a reasonably well defined error after all :)
What is strange is that the error ONLY happens on that page (despite identical calls to the JavaScript function appearing on several other pages) and that the error ONLY appears if the page is loaded in a fresh browser instance. If I reload the page before executing the script (which is triggered in the onblur event of a formfield) the error does not appear and the script is executed successfully.
The function of this script is to download some data from the application server and pipe that data into an HTML element (in this case a td, in other pages it may be a div).
Can anyone shed some light as to where to look for the cause of this?
Here's the relevant JavaScript and HTML (fragments of course):
var myFrames = new Array();
function frameObj(index) {
this.busy = true;
this.index = index;
obj = document.createElement("iframe");
obj.style.height = "0px";
obj.style.width = "0px";
this.frame = document.body.appendChild(obj);
if (this.frame.contentWindow)
this.frameDoc = obj.contentWindow.document;
else if (this.frame.contentDocument)
this.frameDoc = obj.contentDocument;
else
this.frameDoc = null;
}
function findFrame() {
for (i = 0; i < myFrames.length; i++) {
if (!myFrames[i].busy) {
myFrames[i].busy = true;
break;
}
}
if (i >= myFrames.length)
myFrames[i] = new frameObj(i);
return myFrames[i];
}
function getHTML2(oElement, form, data) {
dataElement = oElement;
if (!(frame = findFrame()))
return;
if (frame.frameDoc) {
elms = form.elements;
doc = frame.frameDoc;
doc.open();
doc.write("<html><body><form name=\"send\" method=\"post\" action=\"" +
form.action + "\">");
doc.write("<input type=\"hidden\" name=\"iframe\" value=\"" + frame.index + "\">");
doc.write("<input type=\"hidden\" name=\"data\" value=\"" + data + "\">");
for (i = 0; i < elms.length; i++) {
elm = elms[i];
switch (elm.type) {
case 'button':
case 'file':
case 'reset':
case 'submit':
continue;
case 'checkbox':
if (elm.checked == false)
continue;
case 'radio':
if (elm.value == '')
continue;
}
doc.write("<input type=\"hidden\" name=\"" + elm.name +
"\" value=\"" + elm.value + "\">");
}
doc.write("</form></body></html>");
doc.close();
doc.forms["send"].submit();
}
}
function getHTMLDone2(ind, result) {
dataElement.innerHTML = result;
dataElement.setAttribute('hasContent',true);
elementInitTabctls(dataElement);
elementTablesInit(dataElement);
myFrames[ind].busy = false;
}
Code is part of a JSP, JSP code resolves correctly.
<script language="JavaScript">
function getOnEnter() {
if (window.event.keyCode == 13 ) {
window.event.returnValue = false;
getHTML2(ss, pageform, 'ss');
}
}
function aktieOnEnter(arg) {
if (window.event.keyCode == 13) {
window.event.returnValue = false;
faktie(arg);
}
}
function faktie(arg) {
document.pageform.uaktie.value = arg;
document.pageform.submit();
}
</script>
<form name="pageform" action="../servlet/<%= ks.getServletName() %>" method="post">
<input type="hidden" name="pageid" value="<%= request.getAttribute("pageid") %>">
<input type="hidden" name="uaktie" value="<%= uaktie.getJSPValue() %>">
<div class="inh">
<table class="inh" border="0" cellpadding="0" cellspacing="0">
<tr>
<td rowspan="3"><img src="../lib/login.gif"></td>
<td class="rowhead">Naam</td>
<td><input class="text" type="text" name="naam"
autocomplete="off"
value="<%= naam.getJSPValue() %>"
onkeypress="getOnEnter();"
onblur="getHTML2(ss, pageform, 'ss');"
/></td>
</tr>
<tr>
<td class="rowhead">Wachtwoord</td>
<td><input class="text" type="password" name="wachtwoord"
value="<%= wachtwoord.getJSPValue() %>" /></td>
</tr>
<tr>
<td class="rowhead" id="sh">
Server
</td>
<td id="ss">
</td>
</tr>