一键查询服务器地理位置

在浏览网站时,经常会有看一下网站服务器放在地球那个角落的需求,再顺便看一下whois信息…当然你可以登录一些专门的whois等工具类网站进行查询,这里介绍一个简便的方法。

其实浏览器地址栏可以直接运行javascript,把这些js代码保存为书签,就可以达到上述要求。

直接上代码

javascript:
url=’https://223.5.5.5/resolve?name=’+top.location.hostname+’&type=A&short=1′;
console.log(url);
fetch(url)
.then(response=>response.json())
.then(json=>{
console.log(json);
console.log(‘json.length=’+json.length);
for(var i=0;i<json.length;i++)
{
window.open(‘https://db-ip.com/’+json[i],’_blank’)
}
}
)
.catch(err=>console.log(‘Request Failed’,err));

解释一下,首先top.location.hostname获取域名,通过阿里的公共DNS API('https://223.5.5.5/resolve?name='+top.location.hostname+'&type=A&short=1')查询域名对应ip地址,为什么通过第三方服务呢?因为js是直接获取不了服务器ip的,API返回一个ip地址json数组,分别取出在db-ip.com进行查询。将下面的代码保存为书签地址点击试一下。

javascript:url=’https://223.5.5.5/resolve?name=’+top.location.hostname+’&type=A&short=1′;console.log(url);fetch(url) .then(response=>response.json()) .then(json=>{console.log(json);console.log(‘json.length=’+json.length);for(var i=0;i<json.length;i++){window.open(‘https://db-ip.com/’+json[i],’_blank’)}}) .catch(err=>console.log(‘Request Failed’,err));

注意:1、如果服务器对应多个ip地址,你需要关闭浏览器的防弹出窗口,否则默认查询第一个。

2、代码里加了一些控制台输出,你也可以删除掉。

3、必须以”javascript:”开头,上述代码保存时需写在一行里,这里是为了浏览方便。

其他,比如直接查询网站whois,代码如下:

javascript:window.open('http://whois.chinaz.com/?DomainName='+top.location.hostname,'_blank');

浏览器中的GOOGLE地球

Google刚刚公布了一项新的浏览器插件,让用户可以直接从浏览器中启动Google Earth,就像以前的Google Maps一样。开发人员通过API书写简单的javascript脚本,就可以将Google Earth整合进他们的网页。不过显然现在还没有人安装过此插件,因此进入包含该javascript脚本的页面时,将提示安装插件,这是一种常见和可以接受的做法。目前支持:
# IE 6.0 +
# IE 7.0+
# Firefox的2.x或2.0x ( Firefox的3.0支持即将推出)
# Netscape 7.1以上版本
# Mozilla 1.4及以上版本
# Flock 1.0以上版本

可以在这里访问官方的例程.
速度令人沮丧,不过刷新网页后速度显然提高不少。
相信不久后会有人写出绝妙超酷的应用。

如果你是通过RSS阅读本文,Javascript脚本将不能运行,可以点击这里看原文,图示区域为我国最长的跨海大桥 – 杭州湾大桥。

Google AJAX Feed API 与 Cross Site AJAX

Google刚刚发布了Google AJAX Feed API ,文档和范例在这里

【背景】流行的AJAX程序都大量使用了JavaScript和XMLHttpRequest,而XMLHttpRequest遵循同源策略,即通常所说的跨域问题。什么是同源策略:一般情形下,为安全起见,浏览器不允许你在客户端通过XMLHttpRequest访问别的域,默认你只能存取同域名、同一端口、同一协议下的资源。这给我们造成了麻烦,很明显,在不少情形下,获取别的网站的信息/服务是非常有用的。

【解决方案】通常解决方法有三种:

  1. 在同一域的服务器端建立一个代理,浏览器向该代理网址发送请求,然后该代理向其他域的网址发请求,在获取回复后,或作处理或按原样发回到浏览器。
  2. 使用按需(On-Demand) Javascript 脚本。在页面内动态生成新的,将其src属性指向别的网站的网址,这个网址返回的内容必须是合法的Javascript脚本,常用的是JSON消息。
  3. 使用IFRAME。在页面内嵌或动态生成指向别的网站的IFRAME,然后这2个网页间可以通过改变对方的anchor hash fragment来传输消息。

都是比较麻烦的。
后来,yahoo提供了Yahoo Pipes,一个可视化界面的feed聚合服务程序,业界评价挺高,当然还有其他几个mashups程序可供选择。但是Google AJAX Feed API可能是最适合developer使用的了。

【Google AJAX Feed API】 现在你只要书写几行JavaScript程序,不再需要建立复杂的服务器端代理,Google代劳了所有mashups开发。

【延伸阅读】关于 Cross Site AJAX:

1. Security Considerations: Dynamic HTML
http://msdn.microsoft.com/library/default.asp?url=/workshop/author/dhtml/sec_dhtml.asp

2. About Cross-Frame Scripting and Security
http://msdn.microsoft.com/library/default.asp?url=/workshop/author/om/xframe_scripting_security.asp

3. Cross-Domain Proxy
http://ajaxpatterns.org/Cross-Domain_Proxy

4. Cross Domain XMLHttpRequest using an IFrame Proxy
http://manual.dojotoolkit.org/WikiHome/DojoDotBook/Book75

5. Back Button Support for Atlas UpdatePanels
http://www.nikhilk.net/BackButtonSupport.aspx

6. Cross-document messaging hack
http://blog.monstuff.com/archives/000304.html

7. Calling web services hosted outside of your application with “Atlas”
http://blogs.msdn.com/federaldev/archive/2006/07/31/684229.aspx

http://www.federaldeveloper.com/Shared%20Documents/Presentations%20by%20Marc%20Schweigert/CallAtlasWebServiceInDifferentProject.zip

8. AJAX Tip: Passing Messages Between iframes
http://www.25hoursaday.com/weblog/PermaLink.aspx?guid=3b03cf9d-b589-4838-806e-64efcc0a1a15

轻松在你blog上显示Google Maps地图

想轻松地使用Google Maps API还真不是一件简单的事情,对大多数人来说还是具有一定难度的。正如Google Maps API文档里说的那样,Google Maps API是为熟悉JavaScript的人准备的。不过现在wikimapia.org提供了一个可以简单搞定Google Maps API的方法:在wikimapia上定位并缩放到合适比例,选择显示区域大小,拷贝wikimapia提供给你的html代码,加入你的网页,ok。
其实道理也很简单,wikimapia直接调用了Google Maps的图象,使其在框架里显示并指定框架显示大小。
缺点:只有显示Google Maps地图的单一功能,不能使用添加标记、文字等等其他高级功能。
你可以简单地试验下:在桌面上新建test.txt文本文档,拷贝下面的代码,保存,修改文件名为test.htm,打开。

<iframe src=http://wikimapia.org/s/#y=29898782&x=121935410&z=17&l=6&m=a width=415 height=365 frameborder=0></iframe>

Body.onload 关于页面加载完毕的问题

由于上午的Gmap没有调试成功,一直比较郁闷。
1、下午的时候收到K_Reverter的邮件他告诉我可以用window.onload=func的方法来代替Body.onload使用。
2、上网找了点资料,在360doc看到了一个老外关于window.onload的代码,也拿过来用下。
修改代码如下:

<script type=”text/javascript” src=”http://maps.google.com/maps?file=api&v=2&key=ABQIAAAA43IALmfadaZgVb1L-IEizRRKyzQqj4F9myd02mWX0DutlkqY_BQi03TATJA59RMvJYUa4fN7lK7X5g”>
</script>

<div id=”map” style=”width: 600px; height: 400px;”></div>

<script type=”text/javascript”>
function init() {
if (GBrowserIsCompatible()) {
var map=new GMap(document.getElementById(“map”));
map.addControl(new GSmallMapControl());
map.addControl(new GMapTypeControl());
map.setMapType(G_HYBRID_TYPE);
map.centerAndZoom(new GPoint(121.5581,29.8394), 8);
// Create a base icon for all of our markers that specifies the
// shadow, icon dimensions, etc.
var baseIcon = new GIcon();
baseIcon.shadow = “http://www.google.com/mapfiles/shadow50.png”;
baseIcon.iconSize = new GSize(20, 34);
baseIcon.shadowSize = new GSize(37, 34);
baseIcon.iconAnchor = new GPoint(9, 34);
baseIcon.infoWindowAnchor = new GPoint(9, 2);
baseIcon.infoShadowAnchor = new GPoint(18, 25);

// Create a lettered icon for this point using our icon class
var letter = String.fromCharCode(“A”.charCodeAt(0) + 25);
var icon = new GIcon(baseIcon);
icon.image = “http://www.google.com/mapfiles/marker” + letter + “.png”;
var ningbo = new GMarker(new GPoint(121.5581,29.83941),icon);
GEvent.addListener(ningbo, “click”, function(){
ningbo.openInfoWindowHtml(“过几天出去溜达下!”); });
map.addOverlay(ningbo);

// Create a lettered icon for this point using our icon class
var letter = String.fromCharCode(“A”.charCodeAt(0) + 24);
var icon = new GIcon(baseIcon);
icon.image = “http://www.google.com/mapfiles/marker” + letter + “.png”;
var zhoushan = new GMarker(new GPoint(122.1018,30.0207),icon);
GEvent.addListener(zhoushan, “click”, function(){
zhoushan.openInfoWindowHtml(“你说什么啊?我听不见呀!”);
});
map.addOverlay(zhoushan);
}
};

/* for Mozilla */
if (document.addEventListener) {
document.addEventListener(“DOMContentLoaded”, init, null);
}

/* for Internet Explorer */
/*@cc_on @*/
/*@if (@_win32)
init
/*@end @*/

/* for other browsers */
window.onload = init;
</script>

update:
1、加载比较慢,请耐心等待片刻,页面里有太多的脚本了,嘿嘿。看来玩Gmap还得有个自己的空间才是!
2、在2个GMarker之间点击的时候先打开的openInfoWindow不能自由关闭,看来还要继续除虫。

Gmap

用Gmap api做了张地图,可是发现一个问题,在firefox下显示正常,在ie下浏览器会重置,调试了半天,也没搞定,先发了再说。代码如下:
代码开始

<script type=”text/javascript” src=”http://maps.google.com/maps?file=api&v=2&key=ABQIAAAA43IALmfadaZgVb1L-IEizRT2DsZWTaQwEcLbsDtQz1jnLAblVRRx2_bEwFhsxfHsq9k-5A0PT7xjxw”>
</script>

<div id=”map” style=”width: 600px; height: 400px;”></div>

<script type=”text/javascript”>
//<![CDATA[
if (GBrowserIsCompatible()) {

var map=new GMap(document.getElementById(“map”));
map.addControl(new GSmallMapControl());
map.addControl(new GMapTypeControl());
map.setMapType(G_HYBRID_TYPE);
map.centerAndZoom(new GPoint(121.5581,29.8394), 8);

// Create a base icon for all of our markers that specifies the
// shadow, icon dimensions, etc.
var baseIcon = new GIcon();
baseIcon.shadow = “http://www.google.com/mapfiles/shadow50.png”;
baseIcon.iconSize = new GSize(20, 34);
baseIcon.shadowSize = new GSize(37, 34);
baseIcon.iconAnchor = new GPoint(9, 34);
baseIcon.infoWindowAnchor = new GPoint(9, 2);
baseIcon.infoShadowAnchor = new GPoint(18, 25);

// Create a lettered icon for this point using our icon class
var letter = String.fromCharCode(“A”.charCodeAt(0) + 25);
var icon0 = new GIcon(baseIcon);
icon0.image = “http://www.google.com/mapfiles/marker” + letter + “.png”;

var ningbo = new GMarker(new GPoint(121.5581,29.83941),icon0);
GEvent.addListener(ningbo, “click”, function(){
ningbo.openInfoWindowHtml(“美女啊,我爱你啦!”);
});
map.addOverlay(ningbo);

// Create a lettered icon for this point using our icon class
var letter = String.fromCharCode(“A”.charCodeAt(0) + 24);
var icon = new GIcon(baseIcon);
icon.image = “http://www.google.com/mapfiles/marker” + letter + “.png”;

var zhoushan = new GMarker(new GPoint(122.1018,30.0207),icon);
GEvent.addListener(zhoushan, “click”, function(){
zhoushan.openInfoWindowHtml(“你说什么啊?我饭吃过啦!”);
});
map.addOverlay(zhoushan);

}
//]]>
</script>

代码结束

google的api文挡里面的实例使用了

  <body onload="load()" onunload="GUnload()">
<div id="map" style="width: 500px; height: 300px"></div>
</body>

我估计错误就出现在这个地方,donews的模板我好象设置不了body onload。