我有一个使用.net创建的Web表单,并且在此表单中有一个框架,其源自另一个HTML页面(由courselab软件创建)。每当用户完成页面并单击提交按钮并正常退出或用户根据javascript事件“onbeforeunload”导航离开页面时,我会调用javascript代码。
代码完全正常使用
两种情况下的Firefox * *
在Windows XP上的 IE *如果用户点击了提交按钮(这是由调用javascript代码的courselab软件生成的提交按钮),它仍适用于 CHROME ,
但是如果用户导航离开Web表单,则使用“onbeforeunload”调用此代码并且代码呈现正确,但提交输入永远不会被触发。
类似,此代码不会在Windows 7上使用IE启动。
我还调用了表单的代码“onunload”,但仍然没有任何反应。
更新 IE 8 Firefox 3.6.1.3 Chrome 9.0.597.98
主网页表单包含以下内容
<div id="FOContent">
<iframe runat=server id="mainiframe" name="mainiframe" scrolling="no" frameborder="no"
width="1000" height="920"></iframe>
</div>
框架内容来自此HTML页面
<body style="margin-left:0px;margin-top:0px;margin-right:0px;margin-bottom:0px;" onload="Run(true)" onunload="Shutdown()" onbeforeunload="Shutdown()" oncontextmenu="return false">
<div id="boardFrame" style="position:absolute;left:0px;top:0px;width:1000;height:700">
</div>
<div id="divEmail"></div>
</body>
为“onunload”或“onbeforeunload”调用的javascript代码是
function LMSShutdown() {
if (submit_Var == false) {
var sAiccData = AICC_PrepareData(); // prepare data from the CourseLab
var strQuizResults
strQuizResults = "";
var nPos1 = sAiccData.indexOf("Score=");
nPos1 = nPos1 + 6;
var ePos1 = nPos1 + 2
var score = sAiccData.substring(nPos1, ePos1);
var sHTML = "";
var qTxt;
qTxt = ""
var qrStr = window.location.search;
var spQrStr = qrStr.substring(1);
var arrQrStr = new Array();
// splits each of pair
var arr = spQrStr.split("&");
for (var i = 0; i < arr.length; i++) {
// splits each of field-value pair
var index = arr[i].indexOf("=");
var key = arr[i].substring(0, index);
var val = arr[i].substring(index + 1);
var id1
var id2
if (key == "")
{key = "Q"+i}
qTxt = qTxt + "&" + key + "=" + val;
if (i == 0)
{ id1 = val; }
else
{ id2 = val; }
}
// saves each of field-value pair in an array variable
sHTML += '<FORM id="formQuiz" method="POST" action="../../../StudentView/QuizProcess.aspx?submit_Var=' + 'false' + '&score=' + score + qTxt + '">';
var spQrStr = g_arVars["writing"];
var arrQrStr = new Array();
// splits each of pair
var arr = spQrStr.split("@@@");
for (var i = 0; i < arr.length; i++) {
// splits each of field-value pair
var index = arr[i].lastIndexOf(":");
var key = arr[i].substring(0, index);
var val = arr[i].substring(index + 1);
if (key != "")
{qTxt = qTxt + "&" + key + "=" + val;
sHTML += '<INPUT TYPE="hidden" NAME="' + key + '" VALUE=\'' + val + '\'>';
}
}
sHTML += '<br><input name="btnSubmit" id="btnSubmit" type="button"><br>';
sHTML += '</FORM>';
document.getElementById("divEmail").innerHTML = sHTML;
document.getElementById("formQuiz").submit();
submit_Var = true;
}
}
QuizProcess.aspx页面的HTML并不多,但它有vb .net代码来存储数据到数据库
问题是在不同平台上的所有浏览器中都调用了LMSShutdown函数,但QuizProcess的形式不是仅在(Windows XP或7中的chrome)和(使用Windows 7时的IE 8)中提交的在Windows XP上的IE 8中很好。
答案 0 :(得分:1)
我遇到了类似的问题,如下所述:http://social.msdn.microsoft.com/Forums/en-US/iewebdevelopment/thread/00b88378-a7f1-4148-9587-1ff17d6fa728
基本上似乎在Windows 7和IE9中,子表单被拒绝访问提交调用。
诀窍是让父母去做电话。将onbeforeunload事件放在父表单上,然后找到框架,然后从表单中调用提交。
答案 1 :(得分:0)
检查或停用您的扩展程序,并查看它是哪一个。我之前发生过AdBlock。