关于网络技术

25

2008.8

今天想用JS的replace的方法来把字符串“0-395-07122-4”中所有的“-”都去掉,用了下面的代码:

var isbn="0-395-07122-4";
isbn=isbn.replace(/-/,'');

结果发现只替换了第一个“-”,其它的都还在!查了下《征服AJAX》才发现,replace就是这个功能。

replace(searchValue,replaceValue)的方法

该方法将字符串中第一个出现的searchValue子字符串替换成replaceValue,并返回新的字符串,而原有的字符串不受影响。如:

var str1="aaaa";
var str2=str1.replace("a","b");
alert(str2);
alert(str1);

其中str1仍然是“aaaa”,而str2则为“baaa”。由上面代码可知,这样使用replace仅能替换一个实例。如果想替换多个实例则需要用到正则表达式,例如:

str.replace(/a/g,'b');

这样就能将“aaaa”全部替换成“bbbb”。

22

2008.7

以前曾经写过一篇《用PHP侦测浏览器名称版本》的文章,讲解怎么用PHP来判断访问者所使用的浏览器。现在看了《CSS Hacks and Filters》一书,里面的第六章中提出了用PHP调控CSS的方法。现在记在这里,以备不时之需。

默认情况下,PHP网页的MIMW类型被设置成“text/html”,而MIME类型也可以被看成是“content-type”。当一个CSS文件被被联到一个页面时,它的“content-type”属性通过标签“link”的“type”值被设置成为了“text/css”,如下:

<link href=”../styles/main.css” rel=”stylesheet” type=”text/css” />

如果想用PHP动态生成CSS文件,需要利用PHP的“header”函数把“content-type”属性设置为“text/css”,像这样:

<?php header(“Content-type: text/css”); ?>

有了头部的这一行代码,你可以在文件中使用任何的PHP命令。比如你想在星期天为页面设置一个特别的颜色:

<?php header(“Content-type: text/css”); ?>
#special {
  font-family: Verdana, Arial, Helvetica, sans-serif;
  color: #000000;
  padding: 5px;
  float: right;
  height: 200px;
  width: 100px;
  border: thin solid #FF0000;
}
<?php if (date( “l” ) == “Sunday”) {?>
  #special {
  color: #FFFFFF;
  background-color: #FF0000;
}
<?php } ?>

另一种途径是利用PHP函数来侦测浏览器。在PHP页面中,HTTP头部的“userAgent”值是通过$HTTP_USER_AGENT属性来获得的,$HTTP_USER_AGENT可以利用像“strpos()”这样的方法来得到访问者所使用的浏览器的版本信息。如下面这段代码能够判断浏览器是Internet Explorer 6还是Netscape 4并进行相应的赋值:

<?php
  $strUserAgent = strtolower($HTTP_USER_AGENT)
  if (strpos($strUserAgent, ‘msie 6’) == true) {
  $isIE6 = true
  } else if (strpos($strUserAgent, ‘mozilla/4’) == true) {
  $isNS4 = true
}
?>

在浏览器己知的条件下,就可以导入相对应的CSS文件了:

<?php if (isIE6) { ?>
<link href=”../styles/mainstyleIE6.css” type=”text/css”
}
<?php else if (isNS4) ?>
<link href=”../styles/mainstyleNS4.css” type=”text/css”
}
<?php } ?>
<?php header(“Content-type: text/css”); ?>

建议:最好不要用PHP动态生成CSS文件或代码,而应该用PHP判断浏览器的类型导入相应的CSS。因为如果是以“.css”为结尾的CSS文件,浏览器下载一次后会缓存在临时文件夹中,如果此CSS文件在服务器中没有更新的话,浏览器在下次要载这个CSS文件时就直接从临时文件夹中提取,而不用再从服务器下载更新了。这样能缩短下载时间,减少使用带宽,还能减轻服务器的负担。但如果是用PHP动态生成CSS文件的话,则浏览器每次都要从服务器上更新下载文件,这样就会增长下载时间,增加使用带宽,加重服务器的负担。

,

22

2008.7

今天修改页面,原因是flash在IE下背景是透明的,但在FireFox下却是无效的。代码如下:

<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" height="30" width="197">
  <param name="allowScriptAccess" value="sameDomain">
  <param name="movie" value="/Website/Common/Flash/staples_djs.swf">
  <param name="quality" value="high"><param name="bgcolor" value="#D9DC4D">
  <param name="menu" value="false"><param name="wmode" value="transparent">
  <embed src="/Website/Common/Flash/staples_djs.swft" menu="false" bgcolor="#D9DC4D" quality="high" allowscriptaccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" height="30" width="197" />
</object>

上网一查,果然不出所料,FireFox不支持写在flash中param参数里面的transparent属性,你必须把flash的wmod属性也要写在embed标签中。如下在embed标签中加一个“wmode="transparent"”flash就可以在FireFox下透明了。

<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" height="30" width="197">
  <param name="allowScriptAccess" value="sameDomain">
  <param name="movie" value="/Website/Common/Flash/staples_djs.swf">
  <param name="quality" value="high"><param name="bgcolor" value="#D9DC4D">
  <param name="menu" value="false"><param name="wmode" value="transparent">
  <embed src="/Website/Common/Flash/staples_djs.swf" wmode="transparent" menu="false" bgcolor="#D9DC4D" quality="high" allowscriptaccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" height="30" width="197" />
</object>

Embed是一个不符合网页标准的标签,为什么一向被认为最接近标准的FireFox却只支持Embed标签呢?简单说一下:Embed是Netscape的技术,而FireFox和Netscape是使用相同的内核的,所以FireFox目前还只能认Embed。顺便说一句,虽然Embed不符合W3的XHTML标准,但在HTML5中它却是合法的!

17

2008.7

以前的blog我用的是F2blog程式,写了一些文章。后来程式换成Bo-blog时,原来的文章我也没有备份,全都丢了。

前天无聊时在Google上搜索本博客地址Julabs时,竟搜到了以前我的Blog文章,忽然想到Google的网页快照是可以保存文章的文字内容的。点击后果然看到了以前文章的文字内容,而且Google还提供了文章的Technorati地址。Technorati不仅提供了文章的文字内容,竟然还能看到原来Blog页面截图!下面就是以前博客的截图,看看就知道Technorati的强大了。

以前博客截图

16

2008.7

实现IE6下的PNG图片透明的方法很多,今天在Webappers上看到了一个用JS实现的做法,比目前我所知道的做法要有效的多,详情可以参看Unit PNG Fix的演示网页Unit PNG Fix号称有如下特点(但的确名副其实):

  • 文件体积小,不到1kb!
  • 解决了一些IE滤镜属性的问题;
  • 可以运用于img对象和背景属性;
  • 自动进行,不需要再定义类或函数;
  • 自动设置元素的高宽;
  • 很好很强大,很cool很easy!

Unit PNG Fix文件很小,包括一个未压缩的JS文件还有一幅透明gif图片,总共加起来才980字节。使用也很简单,只要在其JS文件中设置下透明gif图片的地址就可以用在你的网页中了。

其实现原理很简单,如果在IE6下有用PNG图片做背景的话就利用IE滤镜效果来做,这个大家都知道,就不多说了。但Unit PNG Fix能够根据你设置的背景“repeat”属性来实现对应的效果,这就厉害了!如果是直接把PNG图片用在页面中,即用“img”标签形式嵌入页面的话,那么Unit PNG Fix就会用一张透明的GIF图片来替换这张PNG图片,因为IE6是支持GIF透明的,所以大家就会看到一张空白透明的图片。接下来发生的事大家可能都能猜到了,Unit PNG Fix会把新生成的透明GIF图片的背景设置为原PNG图片,并对背景图片进行IE滤镜处理,这样就实现了在视觉上IE6下PNG图片透明的效果了。

分页: 1/5 第一页 1 2 3 4 5 下页 最后页 [ 显示模式: 摘要 | 列表 ]