如何解决调试WEB页面时自动运行TerraExplorer软件的问题

 

大家在使用TerraExplorer Developer开发包进行二次开发的时候,特别是进行WEB开发的时候,经常会遇到这样一个问题,就是在WEB页面(htmlaspx或者jsp等)中嵌入TerraExplorer Object对象,即

<OBJECT ID="TE" CLASSID="CLSID:3a4f9191-65a8-11d5-85c1-0001023952c1"></OBJECT>

然后运行该WEB页面,在页面加载的过程中,会将TerraExplorer View或者TerraExplorer Pro软件运行起来,

一般情况下,只要在当前页面中添加另外一个用于三维场景显示的控件

<OBJECT ID=" TerraExplorer3DWindow" CLASSID="CLSID:3a4f9192-65a8-11d5-85c1-0001023952c1" width=500 height=400></OBJECT>

并且需要保证TerraExplorer3DWindow对象先于TE对象被初始化,即可消除前面提到的问题。

但在有些时候,我们开发的系统中可能会嵌入许多WEB页面,而且在这些页面中也都会涉及到对TE接口的调用,这时运行我们的系统,也有可能把TerraExplorer软件运行起来,这是我们不想看到的,其实也可以说这就是一种逻辑错误,而消除这个错误的方法很简单,就是我们必须保证所有对TE接口的调用,都要放在TerraExplorer3DWindow对象加载之后。

但是我们如何保证在复杂的系统中,理清他们之间的先后顺序呢?

这里可以给大家介绍一个实用的解决方法。就是把TE对象放到一个函数里面去初始化,而不是像原来那样直接嵌在页面里。

例如:

function _$SGCreateTEObj()

{

var obj = window.document.getElementById("TE");

if(obj== null)

{

obj = document.createElement('object');

document.body.appendChild(obj);

obj.name = "TE";

obj.id= "TE";

obj.classid= "CLSID:3a4f9191-65a8-11d5-85c1-0001023952c1";

}

return obj;

}

这样,在其他需要调用TE接口的时候,我们只需要重新实例化一下TE对象即可。

var TE=_$SGCreateTEObj();   

var IPlane = TE.interface("IPlane5");

这时,大家也许还会有疑问,就是对于TE里面的事件接口_ITerraExplorerEvents5该如何引用呢?

在以前Skyline提供给大家的例子中,我们可以看到用javascript中的写法是

function TE::OnLoadFinished()

{

}

或者用vbscript的写法是

sub TE_OnLoadFinished()

end sub

如果说对于TE的事件接口只能用上述固定的方式来实现的话,那么就又回到了最开始的状态,封装TE函数也就没有什么实际意义了。其实在TEITerraExplorer51接口中,我们发现有AttachEventDetachEvent两个方法,这样就可以做到我们在需要调用TE的事件接口时Attach,不需要的时候Detach

function _$SGCreateEvent()

{

    var TE=_$SGCreateTEObj();

    var ITerraExplorer = TE.interface("ITerraExplorer51");

    ITerraExplorer.AttachEvent("OnLButtonDown",_$SGEventOnLButtonDown);       

}  

function _$SGDelEvent()

{

    var TE=_$SGCreateTEObj();

    var ITerraExplorer = TE.interface("ITerraExplorer51");

    ITerraExplorer.DetachEvent("OnLButtonDown",_$SGEventOnLButtonDown);       

}

如此,我们就可以更加灵活地使用TE的事件接口。

希望上述文字能够给大家提供一些帮助或者启发,感谢大家对Skyline的支持。

原文地址:https://www.cnblogs.com/yitianhe/p/1722896.html