提交不在Windows 7下的Chrome和IE中工作

时间:2011-02-15 20:46:19

标签: javascript-events

我有一个使用.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中运行奇怪。

1 个答案:

答案 0 :(得分:0)

这里听起来像是一个安全限制。尝试直接从ASP.NET而不是Javascript生成该表单。这将有助于Chrome看到它,因为它将在原始HTML而不是虚拟。当然,表格中的所有内容都可以隐藏,因此不会影响演示文稿。