全景图插件marzipano使用遇到的问题

由于公司项目需要用到全景图开发,所以在网上找了相关插件,最后找到比较不错的,有两个插件。一个是krpano.js,另外一个谷歌开发的marzipano。由于第一个需要收费,免费版有logo,所以后面选了marzipano。

遇到的问题

  1. 版本0.7.1,开发者将依赖包"glslify": "^6.1.1",写错位置,因该放到生产依赖里面。解决方法在自己项目的package.json里面补上
  2. 引用方式如果是script标签直接引入,那么没有什么问题,但是如果通过npm安装,并且用require或者import 引入的,则回出现报错。解决方式是引入打包好的。原因/marzipano/src/renderers/WebGlBase.js 的30,31行,引入文件有误,在开发环境下直接将路径解析为字符串,没能正确的找到引入的.glsl文件,glslify插件需要用browserify去编译才能正常引入.glsl后缀的文件,所以开发环境下跑不起来

最终直接引入/marzipano/dist里面的打包后的文件

React 组件开发相关思路

在项目中,我们为了沿用一套css,并且简化操作,所以引用了传统的概念,如页面组件、通用组件、局部组件等,但事实上,我们的通用组件以及局部组件,绝大部分往往不能直接提供给第三方使用,这归结于不是真正的组件化方式。

真正的组件化,必须具备通用性、可移植性、灵活性等等,这方面包括:
  1. 内部属性不能依赖业务代码,需要通过属性来传递达到目的。
  2. 组件的视图样式逻辑,应该相互独立。
  • css方面通过css-module方式比较稳妥,免得冲突
  • 一套组件,允许使用通用的utils函数,但utils的规划中,也必须保持业务无相关性
  • 字体图标方面,必须去掉冗余、已废弃的,免得过大。(如果要做好组件化,还需要好好斟酌)

另外,我们的组件方式,页面组件、通用组件、局部组件,需要切换思想,改为:
容器组件、展示组件等。但目前组件化不全,所以这方面只做思考。
1. 容器组件,就像我们的页面组件一样,但是,容器组件应该做的事情有:
* 绑定redux,传递store、以及action给积木组件使用。
* 自身不能定义css样式(所以样式都在展示组件中,组件化定义)。
* 自身几乎不会产出DOM,而是组织展示组件来渲染DOM。
2. 展示组件,等于通用组件,而展示组件应该是:
* 组件不参与redux的事情,所有store、action都通过容器组件通过props传递进来。
* css通过css-module定义,免得出现项目影响的隐患。
* 允许css 通过容器组件传递进来。

如何快速消除牙痛?

1.如果你牙痛的很厉害,看家里有没有香,点燃几根香,然后靠近你牙痛的脸的部位,用香冒出来的烟去熏脸那块儿。记得,不要把烟熏到了你的眼睛。这个方法效果很快,不到几分钟,牙痛就可以得到快速的解决。

2. 如果你在家里的话,那正好,家里有油,也有花椒,这个时候,你快去厨房,把油加热,然后在热油里放几粒花椒,用油炸过后,捞出来,放一会儿,等炸过的花椒微热的时候,用手按到你牙痛的地方,等麻的感觉过去了,再换一粒新花椒,这样也很快就能止住牙痛了。

3. 如果你在家里,家里正好有白酒的话,你也可以在嘴里含一口烈酒,然后用气力把酒抵到你痛的那个牙齿旁边,用酒去消消毒,然后把酒吐出来就可以了。这样的方法也可以让牙痛快速得到缓解。

4. 如果你家里有养芦荟,那么用这种方法来快速解决牙痛也有十分好的效果的。那就是,拔一片叶,把片除掉后,把含有汁的肉叶含在嘴里,然后用舌头把它抵到牙痛的地方,这样就会快速地有效地解决牙痛了。

5. 如果你牙痛得实在受不了,而且又没有以上提到的东西,怎么办?好,这个时候,你用你的手去揉牙痛部位的脸,然后再找一块冰压在那个疼痛的地方,就可以快速地缓解牙痛了。如果夏天的时候痛,也可以买一支冰棍代替冰块。

百度了一下,有上面5种方法,我看完之后果断选择最后一种,到附近小卖部买了个冰淇淋,一口一口咬下然后让它在口里慢慢融化。果然牙痛有所缓解,但是还是痛,又吃了些下火的药,还好第二天就不太痛了。……^_^

js获取当前用户所在地址

不多说了,直接看下面代码吧

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>MJBlog(mj.588cy.com)</title>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script>
<script type="text/javascript">
$(document).ready(function(){

//通过调用新浪IP地址库接口查询用户当前所在国家、省份、城市、运营商信息
$.getScript('http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js',function(){
   $(".country").html(remote_ip_info.country);
   $(".province").html(remote_ip_info.province);
   $(".city").html(remote_ip_info.city);
   $(".isp").html(remote_ip_info.isp);
   });

//通过调用QQIP地址库接口查询本机当前的IP地址
$.getScript('http://fw.qq.com/ipaddress',function(){
   $(".ip").html(IPData[0]); 
   });
});
</script>
</head>
<body>
<div>国家:<span class="country"></span></div>
<div>省份:<span class="province"></span></div>
<div>城市:<span class="city"></span></div>
<div>IP地址:<span class="ip"></span></div>
<div>运营商:<span class="isp"></span></div>
</body>
</html>

解决IE6不支持position:fixed问题

很少的时候,界面上需要一个固定位置的块,不论页面怎么滚动,始终停在它的位置,比如“返回顶部”、“给建议”、“分享按钮”、“广告”等等。css中有position: fixed;可以直接用,很方便,但是万恶的IE6却不支持,下面讲两种方法解决这个问题。

方法一:

*html {/* 只有IE6支持 */
    background-image: url(about:blank); /* 使用空背景 */
    background-attachment: fixed; /* 固定背景 */
}
#box {
    /* 非IE6浏览器使用固定元素 */
    position: fixed;
    top: 0;
    left: 0;
    /* IE6改为绝对定位,并通过css表达式根据滚动位置更改top的值 */
    _position: absolute;
    _top: expression(eval(document.documentElement.scrollTop));
}

这个方法要注意的是,*html使用固定位置空背景目的是解决滚动的时候抖动的问题,原理是这样,滚动页面浏览器重新计算出网页,然后执行css,所以固定元素产生延迟的抖动,使用固定背景之后,在滚动的时候先执行了css,再重新计算网页,所以没有抖动问题了。
document.documentElement.scrollTop是滚动条偏移的值,可以根据这个来设置位置,比如document.documentElement.scrollTop+200或者使用margin定位也行。

方法二:纯css的解决方法

html { _overflow: hidden; }
body { _height: 100%; _overflow: auto; }
.box {
    position: fixed;
    left: 10px;
    top: 180px;
    _position: absolute;
}

原理很简单,滚动条是body的滚动,固定元素是相对body定位,那么把它设置窗口那么高,不就一直是在窗口那个位置了?


	

浏览器的加载与页面性能优化

一、现有知识
总结起来主要有以下几点:
1.带宽:使用CDN,压缩js、css,图片优化
2.HTTP优化:减少转向,减少请求数,缓存,尽早Flush,使用gzip,减少cookie,使用GET
3.DNS优化:减少域名解析时间,增多域名提高并发
4.JavaScript:放页面底部,defer/async
5.CSS:放页面头部,避免@import
6.其它:预加载

DNS
为了应对DNS查询的延迟问题,一些新的浏览器会缓存或预解析DNS,如当Chrome访问google页面的搜索结果时,它会取出链接中的域名进行预解析
当然,Chrome并不是每次都将页面中的所有链接的域名都拿来预解析,为了既提升用户体验又不会对DNS造成太大负担,Chrome做了很多细节的优化,如通过学习用户之前的行为来进行判断
Chrome在启动时还会预先解析用户常去的网站,具体可以参考DNS Prefetching,当前Chrome中的DNS缓存情况可以通过net-internals页面来察看为了帮助浏览器更好地进行DNS的预解析,可以在html中加上以下这句标签来提示浏览器
<link rel="dns-prefetch" href="//HOSTNAME.com">

HEADER 优化
1.header大小
header的大小一般会有500 多字节,cookie内容较多的情况下甚至可以达到1k以上,而目前一般宽带都是上传速度慢过下载速度,所以如果小文件多时,甚至会出现页面性能瓶颈出在用户上传速度上的情况,所以缩小header体积是很有必要的,尤其是对不需要cookie的静态文件上,最好将这些静态文件放到另一个域名上

将静态文件放到另一个域名上会出现的现象是,一旦静态文件的域名出现问题就会对页面加载造成严重影响,尤其是放到顶部的js,如果它的加载受阻会导致页面展现长时间空白,所以对于流量大且内容简单的首页,最好使用内嵌的js和css

2.header的扩展属性
header中有些扩展属性可以用来保护站点,了解它们是有益处的

X-Frame-Options
这个属性可以避免网站被使用frame、iframe的方式嵌入,解决使用js判断会被var location;破解的问题,IE8、Firefox3.6、Chrome4以上的版本都支持
X-XSS-Protection
这是IE8引入的扩展header,在默认情况下IE8会自动拦截明显的XSS攻击,如query中写script标签并在返回的内容中包含这项标签,如果需要禁止可以将它的值设为0,因为这个XSS过滤有可能导致问题,如IE8 XSS Filter Bug
X-Requested-With
用来标识Ajax请求,大部分js框架都会加入这个header
X-Content-Type-Options
如果是html内容的文件,即使用Content-Type: text/plain;的header,IE仍然会识别成html来显示,为了避免它所带来的安全隐患,在IE8中可以通过在header中设置X-Content-Type-Options: nosniff来关闭它的自动识别功能

摘选自:http://www.baiduux.com/blog/2011/02/15/browser-loading/
觉得有用,所以保存下来,有兴趣的也可以看看啊。呵呵

image的加载事件(onload)和加载状态(complete)

之前做过这样一个需求,要让商家页的商家图片按照图片外面box的大小等比例缩放。之前的想法是在页面中先输出图片的src,然后在页面底部初始化js,然后在js中写相应的可以使图片按照box的大小等比例缩放的函数。要实现图片的等比例缩放要做到以下几点,

第一,得到图片的width和height
第二,比较图片的width和height与box的width的height的大小,共有四种情况,

# 如果图片的width和height均小于box的width和height,那么直接让图片上下左右居中即可,
# 如果图片的width大于box的width,height小于box的height,让图片按照宽度等比例缩放,然后垂直居中,
# 如果图片的height大于box的height,width小于box的width,让图片按照高度等比例缩放,然后左右居中,
# 如果图片的width和height均大于box的width和height,那么分别计算图片的widht和height和box的width和height的比,用较小的值作为缩放的比例,然后上下左右居中即可。

第三,将得到的图片放入对应的img节点中即可

    第二步和第三步都比较好实现,几个if..else循环即可搞定,但是对于第一步如何获得图片的width和height是个需要解决的关键性问题,之前的想法是在页面中直接输入图片的src,然后再将图片进行等比例缩小,但是这样存在了一个问题,就是无论如何,图片都会先展示出来原来的大小,然后再等比例缩小,这样在体验上非常不好,所以首先考虑到可以先让图片visiblility:hidden,然后在js计算完图片的大小的时候再让图片visibility:visible,这样虽然可以实现效果但是存在一定的限制,因为在页面的代码全部加载完毕后,图片不一定加载完毕,如果是一张较小的图片,那么这种方法可以很幸运的获得原始图片的高度和宽度,但是如果图片非常大,在图片还没有加载完毕,代码即运行结束,这样获得的图片的大小即不是真实的值,所以现在存在的一个问题就是如何在图片完全加载完毕之后再获得图片的真实的高度和宽度。我们这时自然而然的想到了img对象的onload方法,img.onload是当一张图片被加载完成后所触发的事件。下面看一个例子,

{code}
<input type="button" name="" value="载入图片" onclick="addImg('tt.jpg')" />
<script type="text/javascript">
   function addImg(isrc)
   {
       var Img = new Image();
       Img.src = isrc;
       Img.onload = function ()
       {
             document.body.appendChild(Img);
       }
   }
</script>
{code}

当页面打开后,点击按钮后,会显示tt.jpg,但是如果重复点击会怎样呢?在IE中,除了第一次加载 图片时候显示正常,之后再点击就没有反应了,刷新也一样。FF中,每点击一次加载一张该图片。而这是什么原因呢?是因为在IE中只执行了一次onload或者是缓存的问题吗?先改写一下代码,

{code}
<input type="button" name="" value="载入图片" onclick="addImg('tt.jpg')" />
<script type="text/javascript">
   function addImg(isrc)
   {
       var Img = new Image();
       Img.onload = function ()
       {
             document.body.appendChild(Img);
       }
       Img.src = isrc;
   }
</script>
{code}

现在再点击图片,就正常了,从此可见不是因为IE没有触发onload事件,而是因为IE中加载缓冲区的速度太快,以至于没有运行到img.onload的时候,图片已经被加载完毕了。因此,可以先告诉浏览器如何处理这张图片,然后再制定这张图片的来源。一般情况下,可以用complete来判断图片是否加载完毕。对于 complete 属性来讲,IE是根据图片是否显示过来判断,就是说当加载的图片显示出来后,complete 属性的值才为true ,否则一直是false ,和以前是否加载过该张图片没有关系,即和缓存没有关系!可以写如下的函数来做到各个浏览器中预加载图片的兼容性。

{code}
var imgLoad = function (url) {
   var img = new Image();
   img.src = url;
   if (img.complete) {
       callback(img.width, img.height);
   } else {
       img.onload = function () {
           callback(img.width, img.height);
           img.onload = null;
       };
   };
};
{code}

用一个鸡蛋去掉你身上的湿气

【适用人群】:所有人,尤其是身上容易起风包,并且经常在潮湿的天气里身体痒的人。如果下身也痒或者有异味,就更要使用了。另外,生过病和小产过的女性尤其适用。
【材 料】:
挑选新鲜的鸡蛋2个,清水半锅。注:有条件的最好用土鸡蛋。
【方 法】:
半锅开水,水最好能将鸡蛋全部覆盖,开大火,然后马上将带壳鸡蛋放进锅里煮,水开三分钟后将火调到最小,再煮15-20分钟,关火,闷一两分钟,用笊篱取出鸡蛋,趁热剥壳,请注意一定不要把鸡蛋弄破。趁热将鸡蛋放在脸上滚,快速的(因为太烫),主要是眼睛和额头,然后把面部其他位置都滚到。直到鸡蛋没有热度。症状:拨开蛋清,如果蛋黄上起满了小点点,说明有风气,风气的大小根据小点点的大小和数量不同而不同。如果蛋黄变黑,说明有湿毒,湿毒大小依蛋黄颜色深浅不同而不同,这个自己都可以根据肉眼判断。
【另 外】:
根据这个方法,还可以将下身,四肢,前胸和后背的湿毒和风气吸出来。其中下身(外阴)和腿上的风气呈现条形状,与脸上和上身不同。
【注 意】:
1、鸡蛋一定要热,如果不热了,可以再煮一下继续滚。
2、第一次使用滚脸后,额头会很痒,是因为风气被吸出来了。第一次在胳膊和腿上使用后,小腿和肩膀会很痒,这也是风气和湿毒被吸出来的信号。下身被吸后,明显不再肿胀和有异味。
3、如果这是您第一次使用这种方法,而且您的风气和湿毒还比较严重,那么可能需要每天使用两个鸡蛋,一个滚上身,一个滚下身,直到鸡蛋滚完蛋黄没有变化为止,这个过程也许时间比较长,身上湿气较大可能要持续一个多月才将湿气全部吸出。很多湖南人刚出生就被用鸡蛋滚过,他们定时(比如每个月一次)使用鸡蛋,一次一两个鸡蛋即可将毒气和风气祛除干净。
【最 后】:不要怀疑你自己没有湿毒,其实每个人都有,但是很多很多人不知道。吃药往往不是做好的方法,鸡蛋虽不是很便宜,但是却可以使身体干干净净,这样想来一年二三十元的投资也是值得的。不信你可以花两块钱买几个鸡蛋试试,如果你觉得有效果,请将这个方法告诉你的亲人和朋友,帮助他们也祛除身体中的风气和毒素,使他们也能因为这个小方法而更加健康快乐!

有鼻炎的那个人希望你能看到(转)

有两年时间一直被儿子的鼻炎困扰着,曾经多次寻医未果。一偶然机会从一位阿姨那里得到一小偏方。刚开始没抱多少希望,抱着试试看的态度,用了一次果然立竿见影,一整天儿子的呼吸通畅,整天挂在脸上的鼻涕也不见了。哈哈真有寻得宝物一样的幸福感,现在就把这一妙方与朋友们分享一下。
具体方法如下:取一种俗名叫“荆棘狗”也有叫“老鼠愁”,学名叫“苍耳子”的中药,这种药一般的郊外都很容易寻到,秋天成熟。或者到药店里买一元钱可以买一大包,非常经济,易寻。用“香油”(麻油)文火煎制,冷凉,然后用5ml注射器取油滴鼻。以下是摘自百度的治疗方法:

取苍耳子30~40个,轻轻捶破,放入清洁小铝杯中,加麻油1两,文火煮开,去苍耳,待冷后,倾入小瓶中备用。用时以棉签饱蘸药油涂鼻腔,(本人觉得还是用注射器或滴管卫生些)每日2~3次,两周为一疗程。治疗207例,除3例无效、12例未坚持用药外,余均治愈,临床症状完全消失。随访时间最长的已达3年,未见复发。

非常有效,今后大家再也不用被小小的鼻炎困扰了。

IE的开发人员工具出不来

IE8+ 的开发人员工具挺好用,就是有时候出问题:

主要症状是:点开该工具的时候,在工具栏有图标,但是点击没法展现出来,

原因:由于未知原因,开发人员工具的窗口大小被设置成0高度,而且位置被设置到了屏幕左上方,出了屏幕之外了,所以怎么也看不到它,也移动不了它。

 

解决方案:

在XP下可以右键,最大化

Windows7下,可以使用视窗键(windows键)+方向键来控制窗口的显示

动态加载js文件,常用两总方法

  1. function JsLoader(){
  2. this.load=function(url){
  3.          //获取所有的<script>标记
  4.          var ss=document.getElementsByTagName("script");
  5.          //判断指定的文件是否已经包含,如果已包含则触发onsuccess事件并返回
  6.          for (i=0;i<ss.length;i++){
  7.              if (ss[i].src && ss[i].src.indexOf(url)!=-1){
  8.                  this.onsuccess();
  9.                  return;
  10.              }
  11.          }
  12.          //创建script结点,并将其属性设为外联JavaScript文件
  13.          s=document.createElement("script");
  14.          s.type="text/javascript";
  15.          s.src=url;
  16.          //获取head结点,并将<script>插入到其中
  17.          var head=document.getElementsByTagName("head")[0];
  18.          head.appendChild(s);
  19.          //获取自身的引用
  20.          var self=this;
  21.          //对于IE浏览器,使用readystatechange事件判断是否载入成功
  22.          //对于其他浏览器,使用onload事件判断载入是否成功
  23.          //s.onload=s.onreadystatechange=function(){
  24.          s.onload=s.onreadystatechange=function(){
  25.              //在此函数中this指针指的是s结点对象,而不是JsLoader实例,
  26.              //所以必须用self来调用onsuccess事件,下同。
  27.              if (this.readyState && this.readyState=="loading") return;
  28.              self.onsuccess();
  29.          }
  30.          s.onerror=function(){
  31.              head.removeChild(s);
  32.              self.onfailure();
  33.          }
  34.      }
  35. }
  36. /**使用方法
  37.  *  var jsLoader=new JsLoader();
  38.  *sLoader.onsuccess=function(){}成功时执行的方法
  39.  *jsLoader.onfailure=function(){}失败时执行的方法
  40.  * jsLoader.load("hello.js");
  41. **/

薏米红豆汤

祛湿
祛除体内的湿气,只需两个“药”。这两个药能当茶喝,能当饭吃,而且能解决大问题,它们一是薏米,一是红豆。这两种东西,不需按什么比例,每次一样抓一把,洗干净后放在锅里加水熬,熬好后就是祛湿健脾的佳品-薏米红豆粥了。……

特性
薏米红豆粥有个好处,就是怎么熬都不会发黏发稠,底下总是熬烂了的红豆和薏米,上面是淡红色的汤,而薏米和红豆的有效成份大半都在汤里。熬粥的时候,水放得多一些,这些汤就够我们喝半天了,正好可以当茶喝……

适用
至于功效,那真是非同小可。薏米,在中药里称“薏苡仁”,《神农本草经》将其列为上品,它可以治湿痹,利肠胃,消水肿,健脾益胃,久服轻身益气。红豆,在中药里称作为“赤小豆”,也有明显的利水,消肿,健脾胃之功效,因为它是红色的,红色入心,因此它还能补心。现代人精神压力大,心气虚,饮食不节,运动量少,脾虚湿盛。既要祛湿,又要补心,还要健脾胃,非薏米和红豆莫属。将其熬成粥,意在使其有效成分充分为人体吸收,同时也不给脾胃造成任何负担.

薏米红豆汤
关于薏米和红豆的“消肿”作用,也很有意思。我们千万不要以为肿就是水肿。试看今人,十个里面起码有五六个身体发福,这也是肿,叫做体态臃肿。在中医看来,肥胖也好,水肿也好,都意味着体内有湿。水液不能随气血流动,滞留在人体细胞之间,使人体迅速膨胀起来。水肿如此,肥胖也是如此,只不过是程度有深有浅而已。祛湿性极强的药物或食物能祛除这些滞留在人体的水液,也就能消肿。所以,治疗水肿必用红豆,而实践证明,薏米红豆粥具有良好的减肥功效,既能减肥,又不伤身体,尤其是对于中老年肥胖者,效果尤其好。

功效
湿邪是造成现代各种慢性[2]、顽固性疾病的根本,而薏米红豆汤是治湿邪最好的药。我平时给病人开完方子后,总要嘱咐他们在饮食起居上的一些注意事项,其中说得最多的就是回去熬薏米红豆汤当茶喝。对于不具备这个条件的病人,我会让他用薏米和红豆熬粥,作为晚餐的主食。

做法
1、薏米和红豆洗净,放入砂锅中,加够足够水;
2、开火至锅中水开后,再煮3分钟,关火焖30分钟;
3、再开火,煮至锅中水再次沸腾后,再煮3分钟,关火焖30分钟即可;
4、将汤滤出当水喝,红豆和薏米当饭吃,也可以一起当成粥吃。喜欢甜的,就加些糖。

关于CSS hash的表格对比

 
IE6
IE7
IE8
备注
p{_color:red}
×
×
IE6 专用
*html   p{color:#red;}
×
×
IE6 专用
p{+color:red}
×
IE6,7 专用
p{*color:red}
×
IE6,7 专用
*html   p{color:red;}
×
IE6,7 专用
p{*+color: red}
×
×
IE7 专用
Body> p{ color: red }
×
屏蔽 IE6
×
×
IE8 专用
p{color;}
×
屏蔽 IE8
p{color:red!important}
p{color:red}
都能用
html>body .head{color:#red;}
×
×
只对 IE8

javascript处理URL

URL即统一资源定位符 (Uniform Resource Locator, URL),完整的URL由这几个部分构成:scheme://host:port/path?query#fragment
scheme:通信协议,常用的http,ftp,maito等。
host:主机,服务器(计算机)域名系统 (DNS) 主机名或 IP 地址。
port:端口号,整数,可选,省略时使用方案的默认端口,如http的默认端口为80。
path:路径,由零或多个"/"符号隔开的字符串,一般用来表示主机上的一个目录或文件地址。
query:查询,可选,用于给动态网页(如使用CGI、ISAPI、PHP/JSP/ASP/ASP.NET等技术制作的网页)传递参数,可有多个参数,用"&"符号隔开,每个参数的名和值用"="符号隔开。
fragment:信息片断,字符串,用于指定网络资源中的片断。例如一个网页中有多个名词解释,可使用fragment直接定位到某一名词解释。(也称为锚点)

下面我们举例一个URL,然后获得它的各个组成
http://www.nowamagic.net/newsDetail.php?id=65

window.location.href
可以获得整个URL字符串(在浏览器中就是完整的地址栏)。
1.var test = window.location.href;
2.alert(test);
程序返回 http://www.nowamagic.net/newsDetail.php?id=65

window.location.protocol
可以获得 URL 的协议部分
1.var test = window.location.protocol;
2.alert(test);
程序返回 http:

window.location.host
可以获得 URL 的主机部分
1.var test = window.location.host;
2.alert(test);
程序返回 www.nowamagic.net

window.location.port
可以获得 URL 的端口部分
1.var test = window.location.port;
2.alert(test);
如果采用默认的80端口(update:即使添加了:80),那么返回值并不是默认的80而是空字符。

window.location.pathname
获得 URL 的路径部分(就是文件地址)
1.var test = window.location.pathname;
2.alert(test);

window.location.search
获得查询(参数)部分,除了给动态语言赋值以外,我们同样可以给静态页面,并使用javascript来获得相信应的参数值。
1.var test = window.location.search;
2.alert(test);

window.location.hash
获得锚点。
1.var test = window.location.hash;
2.alert(test);

Javascript中出现内存泄漏的主要原因是什么?

1)循环引用
一个很简单的例子:一个DOM对象被一个Javascript对象引用,与此同时又引用同一个或其它的Javascript对象,这个DOM对象可能会引发内存泄漏。这个DOM对象的引用将不会在脚本停止的时候被垃圾回收器回收。要想破坏循环引用,引用DOM元素的对象或DOM对象的引用需要被赋值为null。

2)Javascript闭包
因为Javascript范围的限制,许多实现依赖Javascript不包,请查看我的前面的文章JavaScript Scope and Closure如果你想了解更多闭包方面的问题。

闭包可以导致内存泄漏是因为内部方法保持一个对外部方法变量的引用,所以尽管方法返回了内部方法还可以继续访问在外部方法中定义的私有变量。对Javascript程序员来说最好的做法是在页面重载前断开所有的事件处理器。

3)DOM插入顺序
当2个不同范围的 DOM 对象连添加到一起的时候一个临时的对象会被创建。这个DOM对象改变范围到document时,那个临时对象就没用了。也就是说, DOM 对象应该按照从当前页面存在的最上面的 DOM 元素开始往下直到剩下的 DOM 元素的顺序添加,这样它们就总是有同样的范围,不会产生临时对象。