JavaScript字符串属性indexOf()的妙用

来源:美丽心情  作者:不详
摘要:我想做过网页的朋友对这个属性函数都不会太陌生吧——我们可以从很多JavaScript参考书上找到它的用法:theString.indexOf(subString,[n])。它在指定字符串对象中寻找传送的子字符串,如果指定参数n,它可以从指定的位置开始向前搜索(…

我想做过网页的朋友对这个属性函数都不会太陌生吧——我们可以从很多JavaScript参考书上找到它的用法:theString.indexOf(subString,[n])。它在指定字符串对象中寻找传送的子字符串,如果指定参数n,它可以从指定的位置开始向前搜索(从左往右)。如果找到子字符串,这个方法返回子字符串在字符串中的位置;如果没有找到相应的字符串,它返回-1。

利用它的这个属性,我们可以叫它干很多事,只要你指挥得当。

一.判断OS

一般情况下,判断出你的访客所用的操作系统会让他们以为你在完花样而已,但并不总是这样。虽然http协议是跨平台的,但你编写的html页面最终的显示效果却往往与客户端所用的操作系统有关。比如MSOS系列(MS-DOS,Windows 9X/NT等)对文本的"另起一行"的定义是"回车加换行",但Mac只要一个"回车"就够了,而Unix/Linux仅仅使用"换行"。这样你在某页面中要输出一些要分行的东东可能就会因此产生"兼容"问题……没关系啦,看看下面的例子。
第一步. 在页面的某一位置插入以下脚本:
<script language="JavaScript"><!--
var newline=''; //定义"另起一行"的全局变量
var browserVer=navigator.appVersion;
if(browserVer.indexOf('Win')!=-1){ //如果当前浏览器的版本是Windows版的
newline='\r\n';}
else{
if(browserVer.indexOf('Mac')!=-1){ //如果当前浏览器的版本是Mac版的
newline='\r';}
else{ //那因该就是Linux版的了
newline='\n';}
}
-->
</script>
第二步.在页面主体(<body>……</body>)中使用它:
<script language="JavaScript"><!--
var win=self.window;
win.alert('第一行'+newline+'第二行'+newline+'第三行'); //可以将newline作为一个变量在任意位置引用
-->
</script>

二.判断浏览器

1998年的浏览器大战似乎已经烟消云散,但由此带来的浏览器兼容问题一直令广大网页编写人员大为疼。关于这个问题的解决方法有许多,这不在本文的讨论范围,但我想最彻底最有效的措施恐怕是为每种主流浏览器分别编写一个页面版本,这样就近乎完美了。试试下面的代码,它将帮你把你的访客带入与客户端浏览器相对应的页面:

<!-- 把这段代码放在页面的前部,最好放在<head>……</head>之间 -->
<script language="JavaScript"><!--
var browser=navigator.appName;
var version=navigator.appVersion;
var ver_number=parseFloat(version.substring(0,version.indexOf('(')));
//如果客户端浏览器是ie并且版本高于4.0
if(browser.indexOf('Microsoft Internet Explorer')!=-1&&ver_number>=4.0) top.location='/ie4/index.html' //假设你为4.0及更高版本的ie准备的页面是/ie4/index.html
//如果客户端浏览器是Netscape并且版本高于4.0
else if(browser.indexOf('Netscape')!=-1&&ver_number>=4.0) top.location='/nc4/index.html' //假设你为Netscape 4.X准备的页面是/nc4/index.html
else top.location='/normal/index.html' //假设你为其他浏览器及低版本的NC、IE准备的页面是/normal/index.html
-->
</script>

三.判断页面的位置

现在网上"拷贝+粘贴"大法极为盛行,就连各大ICP(Internet Content Provider)们也因内容大量重复而被戏称为"Internet Copy & Paste"。这种"大问题"并不是我们这些小小猫讨论讨论就能解决的,我们也没有能力让自己的站点不被copy——copy就让他们copy去吧,有人承认总比没有好吧?但有些人实在太懒了,他们连copy的时间都舍不得花,直接就把你的页面frame到他们的页面中去了……当然你也可以用这个方法(if(top.location!=self.location) top.location=self.location;)使你的页面能自动跳出框架,但这样连你自己也无法frame它们了……当然,还有其它方法,比如判断框架名称等,但是如果你的这个页面要被很多框架页面使用,这样做是不是比较笨?看看下面简单而又短小代码啦,相信会有所用处的……

<!-- 把这段代码插在<head>……</head>之间 -->
<script language="JavaScript"><!--
var hostname='ctsight.topcool.net'; //定义你的站点的主机名
var yesno=top.location.hostname.indexOf('hostname'); //判断当前顶级窗口的URL的主机名部分
if(yesno==-1){ //如果当前顶级窗口的URL的主机名部分不是你的站点
self.alert('对不起,您不能在'+top.location+'页中引用'+self.document.title+'页!');
top.location='http://ctsight.topcool.net/documents/about.html'; //转到你站点上关于"盗版"的警示说明页……
}
-->
</script>

【相关文章】好搜一下
历经8年 微软.NET更换新形象

历经8年 微软.NET更换新形象

在历经了8年风霜后,微软日前推出了.NET系列产品的新版Logo,设计风格和Si…