在这里使用深度遗留系统,无法超出当前页面来修改内容。
现在,CAPTCHA是手工制作的。这也是不可替代的。 Captcha通过iFrames带来两件事:图像本身,以及包含人填充的字段的实际值的表单可以被验证。有一种JavaScript方法可以将该值带入页面,但是通过iFrame的onLoad属性调用/填充的全局值:
<iframe name="frmeIMGVal-Value" id="frmeIMGVal-Value" src="_Inc/Forms/DynamicImg-Value.php" scrolling="no" marginwidth="0" marginheight="0" frameborder="0" width="0" height="0" onload="Javascript: RefreshImageClickPart3();" style="display: none;"><noframes>This web form requires that inline frames be enabled.</noframes></iframe>
iFrame本身非常简洁:
<?php
session_start();
$strValue = (@!isset($_SESSION['ValidationImgValue'])) ? "Not Set" : $_SESSION['ValidationImgValue'];
?>
<!DOCTYPE html">
<html>
<head>
<meta charset="UTF-8">
</head>
<body>
<form name="frmImgValue" id="frmImgValue">
<input type="hidden" name="hdnImgValue" id="hdnImgValue" value="<?php echo $strValue; ?>" />
</form>
</body>
</html>
但是我无法在当前页面中调用$_SESSION['ValidationImgValue']
,因为它会被创建 AFTER 当前页面被加载:它在第一次创建时创建iFrame调用图像。
我的问题是我需要能够直接从jQuery Validate code中访问此值。具体来说,我有
txtValidateImg: {
required: true,
equalTo: "#chkValue"
}
但我需要能够引用全局变量而不是#chkValue
。只是将该变量放在那里会导致整个脚本停止运行,因为它没有预料到 - 它期望一个元素的ID,它不存在于页面中;它存在于页面上的iFrame中存在的不同形式中。
请理解,我无法修改页面外的任何内容。我已经尝试读取元素并提取其值:
$(function(){
$('#chkValue').val(
$('#frmeIMGVal-Value').contents().find('#hdnImgValue').val()
);
});
进入页面上的另一个隐藏元素:
<input type="hidden" id="chkValue" name="chkValue" value="" />
但这也不起作用(再一次,所有验证都停止运作)。
建议?
编辑:好奇的是,有一个包含JS的全局JS文件,它被第二个正在加载的iFrame调用:
function RefreshImageClickPart3(){
strImgValue = window.frames['frmeIMGVal-Value'].document.forms['frmImgValue'].hdnImgValue.value;
}
此文件正在从<head>
调用,并在其他页面中完美运行 - strImgValue
的值可直接从页面中的其他位置访问。但是,当我将其他代码修改为:
$(function(){
$('#chkValue').val( strImgValue );
});
甚至只是
$('#chkValue').val( strImgValue );
隐藏的输入字段仍然无法填充。