ActiveX控件在IE页面中作用范围的简单实验

实验目的

页面跳转时,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控件

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值