KML中使用本地js文件模块

来源:互联网 发布:淘宝直播怎么申请视频 编辑:程序博客网 时间:2024/06/06 09:03

GE5.0以上版本的description块中能直接使用html+js+css,GE使用webkit渲染。但是有一个很大的问题。

GE为了避免开放本地文件访问带来的危险,直接把<script src="localfile.js">的使用封掉了。即使按照官方的设置方法,开放本地文件读取,仍然不能使用本地js。在无网络环境下,这个很扯啊,必须有本地js啊。

看网上大神们,直接在各个description里添加完整的js代码,果断不靠谱啊。如果有n个description,就是有n-1份无用信息!

很幸运的是,GE允许iframe的本地文件访问,而且支持套嵌!这就给本地js重用带来了希望。思路如下:

1.把js代码都放到一个仅有<script>标签的html文件中,js.html。

2.在使用js的页面中,加入iframe,src设为js.html,设置name为jsCall。

3.在调用js时,使用jsCall.window.function()的调用方法,而且function()。

大功告成。

整体结构如下:

doc.kml

|--placemark

---|--description

------|--iframe src=description.html

---------|--iframe src=js.html name=jsCall

---------call function:jsCall.window.function();

代码:

kml:

<Placemark><name>Descriptive HTML</name>        <visibility>1</visibility><Point>        <coordinates>-122.0856545755255,37.42243077405461,0</coordinates>        </Point>        <description><![CDATA[<iframe src="desc.html"></iframe>]]></description></Placemark>


js.html

<script>function c(btn){alert(btn.value);btn.value = "clicked";}</script>

desc.html

<iframe name = "jsCall" src="js.html" width="0" height="0"></iframe><script>function c(btn){jsCall.window.c(btn);}</script><input type = "button" onclick="c(this)" value = "click"/>

GE测试通过,起码代码看起来漂亮很多。


原创粉丝点击