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>
<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"/>