Eval Google 来自脚本标签中文本区域的地球代码
Eval Google Earth code from textarea in script tag
我有这段代码,我必须让它在文本区域中没有文本的情况下工作。
所以写在 textarea 中的代码应该在 script 标签中并且它应该可以工作。任何人都可以帮助我,因为我真的不知道 eval(document.getElementById('code').value 是如何工作的,所以我不知道如何集成它。这是我正在谈论的代码:
<html>
<head>
<title>GEarthExtensions Samples - Drawing an extruded polygon</title>
<script src="http://www.google.com/jsapi?key=ABQIAAAAsc0UQXoo2BnAJLhtpWCJFBTgHOxFyKCf35LCvsI_n4URElrkIhS9MkSlm_0NZWgrKFkOsnd5rEK0Lg" type="text/javascript"></script>
<script src="extensions-0.2.1.pack.js" type="text/javascript"></script>
<script type="text/javascript">
/* <![CDATA[ */
var ge = null;
var gex = null;
google.load('earth', '1');
google.setOnLoadCallback(function() {
google.earth.createInstance('map3d', function(pluginInstance) {
ge = pluginInstance;
ge.getWindow().setVisibility(true);
gex = new GEarthExtensions(pluginInstance);
//gex.util.lookAt([0, 0], { range: 800000, tilt: 65 });
}, function() {});
});
/* ]]> */
</script>
</head>
<body>
<div id="map3d_container" style="width: 500px; height: 500px;">
<div id="map3d" style="height: 100%"></div>
</div>
<textarea id="code" style="font-family: monospace; width: 500px; height: 200px;">
gex.dom.clearFeatures();
var placemark = gex.dom.addPlacemark({
polygon: {
polygon: [],
extrude: true,
altitudeMode: geo.ALTITUDE_ABSOLUTE
},
style: {
line: { width: 0 },
poly: '#ff0'
}
});
var coords = placemark.getGeometry().getOuterBoundary().getCoordinates();
gex.edit.drawLineString(placemark.getGeometry().getOuterBoundary(), {
drawCallback: function(coordIndex) {
var coord = coords.get(coordIndex);
coords.setLatLngAlt(coordIndex,
coord.getLatitude(), coord.getLongitude(), 100000);
}
});
</textarea><br/>
<input type="button" onclick="eval(document.getElementById('code').value);" value="Run"/>
</body>
</html>
对于运行script标签中的代码,需要先解析。 DOMParser 是一个很好的工具:
function run(value) {
var parser = new DOMParser();
var doc = parser.parseFromString(value,"text/html"); // create DOM from value
var code = doc.getElementsByTagName("script"); // get script tags from that DOM
if(!code.length) eval(value); // no script tag, eval the value directly
else eval(code[0].innerText); // eval the text from the first script tag
}
测试HTML代码
<textarea id="code">
<script>
alert("hello");
</script>
</textarea>
<button onclick="run(document.getElementById('code').value)">Run</button>
我有这段代码,我必须让它在文本区域中没有文本的情况下工作。 所以写在 textarea 中的代码应该在 script 标签中并且它应该可以工作。任何人都可以帮助我,因为我真的不知道 eval(document.getElementById('code').value 是如何工作的,所以我不知道如何集成它。这是我正在谈论的代码:
<html>
<head>
<title>GEarthExtensions Samples - Drawing an extruded polygon</title>
<script src="http://www.google.com/jsapi?key=ABQIAAAAsc0UQXoo2BnAJLhtpWCJFBTgHOxFyKCf35LCvsI_n4URElrkIhS9MkSlm_0NZWgrKFkOsnd5rEK0Lg" type="text/javascript"></script>
<script src="extensions-0.2.1.pack.js" type="text/javascript"></script>
<script type="text/javascript">
/* <![CDATA[ */
var ge = null;
var gex = null;
google.load('earth', '1');
google.setOnLoadCallback(function() {
google.earth.createInstance('map3d', function(pluginInstance) {
ge = pluginInstance;
ge.getWindow().setVisibility(true);
gex = new GEarthExtensions(pluginInstance);
//gex.util.lookAt([0, 0], { range: 800000, tilt: 65 });
}, function() {});
});
/* ]]> */
</script>
</head>
<body>
<div id="map3d_container" style="width: 500px; height: 500px;">
<div id="map3d" style="height: 100%"></div>
</div>
<textarea id="code" style="font-family: monospace; width: 500px; height: 200px;">
gex.dom.clearFeatures();
var placemark = gex.dom.addPlacemark({
polygon: {
polygon: [],
extrude: true,
altitudeMode: geo.ALTITUDE_ABSOLUTE
},
style: {
line: { width: 0 },
poly: '#ff0'
}
});
var coords = placemark.getGeometry().getOuterBoundary().getCoordinates();
gex.edit.drawLineString(placemark.getGeometry().getOuterBoundary(), {
drawCallback: function(coordIndex) {
var coord = coords.get(coordIndex);
coords.setLatLngAlt(coordIndex,
coord.getLatitude(), coord.getLongitude(), 100000);
}
});
</textarea><br/>
<input type="button" onclick="eval(document.getElementById('code').value);" value="Run"/>
</body>
</html>
对于运行script标签中的代码,需要先解析。 DOMParser 是一个很好的工具:
function run(value) {
var parser = new DOMParser();
var doc = parser.parseFromString(value,"text/html"); // create DOM from value
var code = doc.getElementsByTagName("script"); // get script tags from that DOM
if(!code.length) eval(value); // no script tag, eval the value directly
else eval(code[0].innerText); // eval the text from the first script tag
}
测试HTML代码
<textarea id="code">
<script>
alert("hello");
</script>
</textarea>
<button onclick="run(document.getElementById('code').value)">Run</button>