实验目的
页面跳转时,object引用的控件会被释放,该实验测试了如何在frameset中实现页面跳转时,object引用的变量保持状态一致不被释放
一、测试对象的制作
activeX控件,提供三个外部可以调用的接口:
1. void beginTransaction( ) ---申请变量的内存控件
2. void setvalue(double a) ----为变量赋值
3. double getvalue() ----获取变量的值
具体制作过程参考另一篇转载的博客
http://download.csdn.net/detail/fantasyagain/4012899
二、常规页面中通过form提交表单
页面1:
<OBJECT ID="Calc" CLASSID="CLSID:9F52F934-BD11-4AE1-ACA2-679B2DAE946D"></OBJECT>
<form id="form1" action="CalcChild2.htm">
<table>
<tr>
<td><input type="button" οnclick="javascript:beginTransaction();" value="beginTransaction"></input></td>
</tr>
<tr>
<td><input type="text" id="valueInput"></td>
<td><input type="button" οnclick="javascript:setvalue();" value="setvalue"></input></td>
</tr>
</table>
</form>
<script type="text/JavaScript">
function beginTransaction(){
var calc=document.getElementById("Calc");
calc.beginTransaction();
}
function setvalue(a){
var calc=document.getElementById("Calc");
var value=document.getElementById("valueInput");
calc.setvalue(value.value);
}
</script>
页面2:
<OBJECT ID="Calc" CLASSID="CLSID:9F52F934-BD11-4AE1-ACA2-679B2DAE946D"></OBJECT>
<form id="form1" action="CalcChild1.htm">
<table>
<tr>
<td><input type="button" οnclick="javascript:getvalue();" value="getvalue"></input></td>
</tr>
</table>
</form>
<script type="text/JavaScript">
function getvalue(){
var calc=document.getElementById("Calc");
var result=Calc.getvalue();
alert("getvalue:"+result);
}
</script>
结果:
在页面2中无法获取值,在表单提交的时候已经释放了OBJECT中引用的控件
三、在frameset中提交表单
主页面:
<HTML>
<HEAD>
<TITLE>对象 Calc 的 ATL 8.0 测试页</TITLE>
<OBJECT ID="Calc" CLASSID="CLSID:9F52F934-BD11-4AE1-ACA2-679B2DAE946D"></OBJECT>
</HEAD>
<frameset rows="100%" border="10">
<frame src="CalcChild1.htm">
</frameset>
</HTML>
页面1:
<form id="form1" action="CalcChild2.htm">
<table>
<tr>
<td><input type="button" οnclick="javascript:beginTransaction();" value="beginTransaction"></input></td>
</tr>
<tr>
<td><input type="text" id="valueInput"></td>
<td><input type="button" οnclick="javascript:setvalue();" value="setvalue"></input></td>
</tr>
<tr>
<td><input type="button" οnclick="javascript:submit()"></td>
</tr>
</table>
</form>
<script type="text/JavaScript">
function beginTransaction(){
parent.Calc.beginTransaction();
}
function setvalue(a){
var value=document.getElementById("valueInput");
parent.Calc.setvalue(value.value);
}
function onsubmit(){
form1.submit();
}
</script>
页面2:
<form id="form1" action="CalcChild1.htm">
<table>
<tr>
<td><input type="button" οnclick="javascript:getvalue();" value="getvalue"></input></td>
</tr>
</table>
</form>
<script type="text/JavaScript">
function getvalue(){
var result=parent.Calc.getvalue();
alert("getvalue:"+result);
}
</script>
结果:
在frameset中的子页面1,通过表单提交跳转到页面2
此时通过parent.Calc.getvalue()的方法能够获得在子页面1中设置的值(parent.Calc.setvalue())
四、在frameset中两个frame之间的调用
主页面:
<HTML>
<HEAD>
<TITLE>对象 Calc 的 ATL 8.0 测试页</TITLE>
<OBJECT ID="Calc" CLASSID="CLSID:9F52F934-BD11-4AE1-ACA2-679B2DAE946D"></OBJECT>
</HEAD>
<frameset rows="50,50" border="10">
<frame src="CalcChild1.htm">
<frame src="CalcChild2.htm">
</frameset>
</HTML>
子页面1:
<form id="form1" action="CalcChild2.htm">
<table>
<tr>
<td><input type="button" οnclick="javascript:beginTransaction();" value="beginTransaction"></input></td>
</tr>
<tr>
<td><input type="text" id="valueInput"></td>
<td><input type="button" οnclick="javascript:setvalue();" value="setvalue"></input></td>
</tr>
</table>
</form>
<script type="text/JavaScript">
function beginTransaction(){
parent.Calc.beginTransaction();
}
function setvalue(a){
var value=document.getElementById("valueInput");
parent.Calc.setvalue(value.value);
}
</script>
子页面2:
<form id="form1" action="CalcChild1.htm">
<table>
<tr>
<td><input type="button" οnclick="javascript:getvalue();" value="getvalue"></input></td>
</tr>
</table>
</form>
<script type="text/JavaScript">
function getvalue(){
var result=parent.Calc.getvalue();
alert("getvalue:"+result);
}
</script>
结果:
在页面2中也可以获得子页面1中设置的值
结论:
object引用的activeX控件在页面跳转的时候会被析构,解决方法是使用frameset,在父页面中加载控件,把需要跳转的页面放在frame中,子页面通过parent来调用object引用的activeX控件