为什么我的小部件不能在 Wirecloud 中工作?

Why wont my widget work inside of wirecloud?

我只使用 html、css 和 js 制作了以下小部件。当您搜索我们数据库中存在的关键字(例如桃子或草莓)时,这本身就可以正常工作:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Search Seller widget</title>
<meta name="viewport" content="width=device-width">
<style>

  #mapCanvas {
    width: 550px;
    height: 600px;
    float: left;
    border-style: solid; color: #59C0DF;

  }
  #infoPanel {
    float: left;
    margin-left: 10px;
  }
  #infoPanel div {
    margin-bottom: 5px;
  }

  #tbl{
     border-collapse: collapse;
  }
  #tbl, td, th{
    border: 2px solid #70B8FF;
     padding: 5px;

  }
  th{
    font-style: bold;
    color: black;
    background-color: #59C0DF;
  }

  .btn {
  background: #3498db;
  background-image: -webkit-linear-gradient(top, #3498db, #2980b9);
  background-image: -moz-linear-gradient(top, #3498db, #2980b9);
  background-image: -ms-linear-gradient(top, #3498db, #2980b9);
  background-image: -o-linear-gradient(top, #3498db, #2980b9);
  background-image: linear-gradient(to bottom, #3498db, #2980b9);
  -webkit-border-radius: 28;
  -moz-border-radius: 28;
  border-radius: 28px;
  font-family: Courier New;
  color: #ffffff;
  font-size: 20px;
  padding: 10px 20px 10px 20px;
  text-decoration: none;
}

.btn:hover {
  background: #3cb0fd;
  background-image: -webkit-linear-gradient(top, #3cb0fd, #3498db);
  background-image: -moz-linear-gradient(top, #3cb0fd, #3498db);
  background-image: -ms-linear-gradient(top, #3cb0fd, #3498db);
  background-image: -o-linear-gradient(top, #3cb0fd, #3498db);
  background-image: linear-gradient(to bottom, #3cb0fd, #3498db);
  text-decoration: none;
}

.textbox {
    border: 1px solid #848484;
    -webkit-border-radius: 30px;
    -moz-border-radius: 30px;
    border-radius: 30px;
    outline:0;
    height:25px;
    width: 120px;
    padding-left:10px;
    padding-right:10px;
  }
</style>
</head>
<body onload="initialize(45.2671, 19.8335,0)"> <!--bgcolor="#E6E6FA"-->

<div id="top">

  <label>
    <input type="url" id="url" class="textbox" value="">
  </label>

  <label>
    <button id="get" class="btn">GET</button>
  </label>
    <label>City</label>
    <input type="text" id="City" class="textbox" value="" readonly>
    <label>Company</label>
    <input type="text" id="Company" class="textbox" value="" readonly>
    <label>Latitude</label>
    <input type="text" id="Lat" class="textbox" value="" readonly>
    <label>Longitude</label>
    <input type="text" id="Lon" class="textbox" value="" readonly>


<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js"></script>
<script src="http://maps.googleapis.com/maps/api/js"></script>
</br>
<div id="map" style="width:500px;height:380px; border-style: solid; border-color: #3498db; display: none;"></div>
</div>

<div>
    <a href="http://www.panonit.com" target="_blank"> <img src="PanonitLogo.png" alt="Logo" style="width:160px;height:75px; margin-top:15px" > </a>
    <a href="http://www.finish-project.eu/" target="_blank"> <img src="Cropped.png" alt="Logo" style="width:160px;height:75px;margin-left:15px; margin-top:15px" > </a>
    <a href="http://ec.europa.eu/index_en.htm" target="_blank"> <img src="European.jpg" alt="Logo" style="width:160px;height:75px;margin-left:15px; margin-top:15px" > </a>
</div>


<script>
var obj;

var cors_api_url = 'https://cors-anywhere.herokuapp.com/';
function doCORSRequest(options, printResult) {
var x = new XMLHttpRequest();
x.open(options.method, cors_api_url + options.url);
x.onload = x.onerror = function() {
  printResult(
    options.method + ' ' + options.url + '\n' +
    x.status + ' ' + x.statusText + '\n\n' +
    (x.responseText || '')
  );
};
x.send(options.data);
}
// Bind event
(function() {
var urlField = document.getElementById('url');
var obj;


document.getElementById('get').onclick = function(e) {
    var glat;
    var glon;
  e.preventDefault();
  doCORSRequest({
    method: this.id = 'GET',
    url: 'trace.panonit.com/widgets/GetFieldCoordinates/' + urlField.value
  }, function printResult(result) {
    result = result.substring(result.length, result.indexOf('{'));
    obj = JSON.parse(result);

    var cityField = document.getElementById('City');
    cityField.value = obj.City;
    var company = document.getElementById('Company');
    company.value = obj.Company;
    var lat = document.getElementById('Lat');
    lat.value = obj.Lat;
    glat = lat.value;
    var lon = document.getElementById('Lon');
    lon.value = obj.Lon;
    glon = lon.value;
    if(obj.Lat==null || obj.Lon ==null)
    {
       //initialize(glat, glon);
       document.getElementById('City').value = "City not found";
       document.getElementById('Company').value = "Company not found";
       document.getElementById('Lat').value = "Latitude not found";
       document.getElementById('Lon').value = "Longitude not found";
       initialize(45.2671, 19.8335,0);
    }
    else {
        initialize(glat, glon,1);
    }

  });
};
})();


function initialize(lat, lon, displayMarker) {
  document.getElementById('map').style.display = "";
  var mapProp = {
    center:new google.maps.LatLng(lat,lon),
    zoom:5,
    mapTypeId:google.maps.MapTypeId.ROADMAP
  };
  var map=new google.maps.Map(document.getElementById("map"),mapProp);
  if(displayMarker==1){
      var marker = new google.maps.Marker({
                        position: new google.maps.LatLng( lat,lon),
                        animation: google.maps.Animation.DROP,
                        map: map,
                        title: 'Crop marker!'
                    });
  }

}
</script>
</body>
</html>

当我借助 fispace 在 eclipse 中的附加组件将其转换为小部件,然后继续将其上传到 fiware lab 或 fispace 的 wirecloud 时,它显示缺少 api 键的错误。所以我得到了 google 的 api 键并像这样附加它:

<script src="https://maps.googleapis.com/maps/api/js?key=AIzaSyBGrI_BKBCPZfOCskNEH5B5wiJhuV1yKeI"></script> 

然而我最终还是在线云中看到了一张灰色的地图。 谁能帮我解决这个问题?谢谢你。

我在使用原始 HTML 文件时因混合内容而出错。使用“https://ajax.googleapis.com/ajax/libs/jquery/1.10.2/jquery.min.js" and "https://maps.googleapis.com/maps/api/js”加载 jquery 和 google 地图(考虑到 https 的 s)解决了这个问题。至少当我搜索 peach 时,小部件显示 Arsen Agro 公司。