Dart lang不止一个window.message.add

时间:2012-04-22 15:21:30

标签: json window dart element dart-html

好的我正在使用dart创建一个程序来获取用户位置,然后反转地理位置(openmapsapi) 然后显示具有特定城市名称的新闻(google news api)

我添加了以下代码用于openmap api并获取本地存储中的城市。 从那里我想使用类似的代码为谷歌新闻api,但它抛出一个错误可能两个window.on.data行无法添加。部分代码取自Seth Ladd的博客,我有点无能为力一切工作如何

    window.on.message.add(locReceived);
    Element script = new Element.tag("script");
    var somelat=window.localStorage.$dom_getItem("LAT");
    var somelng=window.localStorage.$dom_getItem("LNG");
    var someurl="http://nominatim.openstreetmap.org/reverse?  format=json&lat="+somelat+"&lon="+somelng+"&addressdetails=1&json_callback=callbackForMapsApi";
    script.src=someurl;
    document.body.elements.add(script);

这是我正在使用的相关html代码

      <script type="text/javascript">
function callbackForJsonpApi(s) {
    window.postMessage(JSON.stringify(s), '*');
}

function callbackForMapsApi(s) {
    window.postMessage(JSON.stringify(s), '*');
}
</script>

以前没有真正使用过网络技术,我们将不胜感激。

1 个答案:

答案 0 :(得分:3)

你应该只有一个 window.on.message.add ,因为所有的消息处理程序都会收到来自JavaScript的所有消息,这些消息可能导致并发问题。而是确保JavaScript代码为其发送的消息添加目标标头:

function callbackForJsonpApi(s) {
    s.target = "dartJsonHandler"
    window.postMessage(JSON.stringify(s), '*');
}

function callbackForMapsApi(s) {
    s.target = "dartMapsHandler";
    window.postMessage(JSON.stringify(s), '*');
}

然后在Dart代码中打开此目标标头。我在DartGap(PhoneGap的飞镖包装器)中做了类似的技巧,你可以查看相关的代码here