在脚本标记中使用textarea评估Google Earth代码

时间:2015-08-10 07:48:38

标签: javascript html html5 eval google-earth-plugin

我有这个代码,我必须让它在没有textarea中的文本的情况下工作。 因此,在textarea中编写的代码应该在脚本标记中,它应该可以工作。任何人都可以帮助我,因为我真的不知道eval(document.getElementById('code')。值是如何工作所以我不知道如何集成它。这是我正在谈论的代码:

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

1 个答案:

答案 0 :(得分:0)

要在脚本标记中运行代码,您需要先解析它。 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>