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>
<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" οnclick="c(this)" value = "click"/>
GE测试通过,起码代码看起来漂亮很多。