KML中使用本地js文件模块

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测试通过,起码代码看起来漂亮很多。


你可能感兴趣的:(KML中使用本地js文件模块)