以前都是基于一个搭建好的框架进行开发,今天因为测试功能的需要自己要搭建一个简单的页面进行功能检测,碰到了一些问题,在此把解决后的代码分享给大家。
首先,TerraExplorer v6的ActiveX分为功能显示和API提供两部分,第一版测试页面如下:
<head>
<object id="sgworld" name="sgworld" classid="CLSID:3a4f91b0-65a8-11d5-85c1-0001023952c1">
</object><!-- 提供API-->
</head>
<script type="text/javascript" language="javascript">
function init() {
SGWorld.AttachEvent("OnLoadFinished", OnLoadFinished);
SGWorld.Project.Open("c:\\test.fly");
} //init
function btn() {
SGWorld.Command.Execute(1037, 0);
}
function OnLoadFinished() {
}
</script>
<body οnlοad="init();">
<table border="1" width="400px">
<tr>
<td>
<button class="tool_btn" οnclick="btn()">
测试</button>
</td>
</tr>
<tr>
<td>
<object id="3DWindow" classid="CLSID:3a4f9192-65a8-11d5-85c1-0001023952c1">
</object><!-- 功能展示-->
</td>
</tr>
</table>
</body>
通过实践发现虽然ActiveX的事件添加成功并能够使用,但是具体功能如加载数据等基础功能却不能实现,并且浏览页面时弹出对话框询问是否允许添加ActiveX,于是将提供API的对象动态添加到页面中
<head>
<title></title>
</head>
<script type="text/javascript" language="javascript">
function CreateSGObj() {//动态添加对象
var obj = $("sgworld");
if (obj == null) {
obj = document.createElement('object');
document.body.appendChild(obj);
obj.name = "sgworld";
obj.id = "sgworld";
obj.classid = "CLSID:3a4f91b0-65a8-11d5-85c1-0001023952c1";
}
return obj;
}
var SGWorld;
function init() {
SGWorld = CreateSGObj();
SGWorld.AttachEvent("OnLoadFinished", OnLoadFinished);
SGWorld.Project.Open("c:\\test.fly");
} //init
function btn(test) {
SGWorld.Command.Execute(1037, 0);
}
function OnLoadFinished() {
}
</script>
<body οnlοad="init();">
<table border="1" width="400px">
<tr>
<td>
<button class="tool_btn" οnclick="btn()">
测试</button>
</td>
</tr>
<tr>
<td>
<object id="3DWindow" classid="CLSID:3a4f9192-65a8-11d5-85c1-0001023952c1">
</object>
</td>
</tr>
</table>
</body>
功能实现,可以使用API进行二次功能开发,但是目前skyline v6因为改动较大,无法给V5的提供良好兼容性,因此改为使用V5接口进行尝试
<script type="text/javascript" language="javascript">
function CreateSGObj() {
var obj = $("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"; //注意此时引用的clsid与V6不同
}
return obj;
}
var imenu;
function init() {
SGWorld = CreateSGObj();
var ITerraExplorer = SGWorld.interface("ITerraExplorer51");
imenu = SGWorld.interface("IMenu");
ITerraExplorer.AttachEvent("OnLoadFinished", OnLoadFinished);
ITerraExplorer.Load("c:\\test.fly");
} //init
function btn() {
imenu.Invoke(33350);
}
function OnLoadFinished() {
}
</script>
<body οnlοad="init();">
<table border="1" width="400px">
<tr>
<td>
<button class="tool_btn" οnclick="btn()">
测试</button>
</td>
</tr>
<tr>
<td>
<object id="3DWindow" classid="CLSID:3a4f9192-65a8-11d5-85c1-0001023952c1">
</object>
</td>
</tr>
</table>
</body>
</html>
转载于:https://blog.51cto.com/192jiang/743637