卡西卡的小寶庫
寶庫寶庫寶庫

Detecting Internet Explorer More Effectively
http://msdn2.microsoft.com/en-us/library/ms537509.aspx
Understanding User-Agent Strings
http://msdn2.microsoft.com/en-us/library/ms537503(VS.85).aspx
About Conditional Comments
http://msdn2.microsoft.com/en-us/library/ms537512(VS.85).aspx

 

怎麼使"<div>"顯示到dropdownlist或listbox 的前面?
在div裡加iframe:
<div>
<iframe src="javascript:false" style="Z-INDEX:-1; FILTER:progid:DXImageTransform.Microsoft.Alpha(style=0,opacity=0); LEFT:0px; VISIBILITY:inherit; WIDTH:158px; POSITION:absolute; TOP:0px; HEIGHT:110px">
</iframe>
</div>

 

問題:DateTime.Today.ToString("yyyy/MM/dd") 的結果一定是"2006/03/05"嗎?

OS: Windows Mobile 6 Professional (ASUS P750)

在「開始\設定\系統\區域設定」中,「中文(台灣的)」的「日期」日曆類型有三種,其中有一個「臺灣曆(中文)」會讓ToString吐出民國年,"97/03/05"!

不正確的日期字串導致不預期的錯誤啊……

Screen23
臺灣曆(中文)
Screen21
97/03/05
Screen19
西曆(英文)
Screen18
2008/03/05

DateTime.Parse 也有相同的情況。

 

ASP.NET 1.1及2.0的RegularExpressionValidator都無法指定是否區分大小寫(RegexOptions.IgnoreCase)。

要檢查上傳的副檔名,其正規表示式如下
^[a-zA-Z]:(\\.+)(\.pps|\.sql|\.dat)$  

為處理大小寫須改成
^[a-zA-Z]:(\\.+)(\.[pP][pP][sS]|\.[sS][qQ][lL]|\.[dD][aA][tT])$

可用程式
filter = "\.ppt|\.sql|\.dat";
for ( int i='a'; i<='z' ; i++ )
{
  string ls = new string((char)i,1);
  string us = new string((char)(i-32),1);
  filter = filter.Replace(ls,"["+ls+us+"]");
} // for
RegularExpressionValidator1.ValidationExpression = @"^[a-zA-Z]:(\\.+)("+filter+")$";

 

目標:由playlist.mp3控制播放內容(可空或多首),播完10秒後重新載入本頁。

說明:

  1. playlist.mp3可以是真的mp3音樂檔,或是內容為多首mp3網址(一行一首)的文字檔。
  2. playlist.mp3的內容由server端控制,可依警報或時間或隨機產生內容。
[body]
<OBJECT id=player type=application/x-oleobject height=1 width=1
classid='CLSID:6BF52A52-394A-11d3-B153-00C04F79FAA6' >
<PARAM NAME="URL" VALUE="playlist.mp3">
<PARAM NAME="rate" VALUE="1">
<PARAM NAME="playCount" VALUE="1">
<PARAM NAME="autoStart" VALUE="true">
<PARAM NAME="baseURL" VALUE="">
<PARAM NAME="volume" VALUE="100">
<PARAM NAME="mute" VALUE="0">
<PARAM NAME="uiMode" VALUE="none">
</OBJECT>
[/body]

接收PlayStateChange[msdn]事件

[script]
window.onload = function() {
  var player = document.getElementById('player');
  player.attachEvent("playstatechange",MediaPlayer_playStateChange);
}
function MediaPlayer_playStateChange(newState) {
  if ( newState == 10/*Ready*/ ) {
    // 10秒後重新載入
    window.setTimeout("document.location.reload();", 1000*10);
  } // if
}
[/script]

參考資料:

  • Windows Media Player Reference - W3Schools
  • Using the Windows Media Player Control with Firefox - MSDN
  • Player.playState - MSDN
    Value State Description
    0 Undefined Windows Media Player is in an undefined state.
    1 Stopped Playback of the current media item is stopped.
    2 Paused Playback of the current media item is paused. When a media item is paused, resuming playback begins from the same location.
    3 Playing The current media item is playing.
    4 ScanForward The current media item is fast forwarding.
    5 ScanReverse The current media item is fast rewinding.
    6 Buffering The current media item is getting additional data from the server.
    7 Waiting Connection is established, but the server is not sending data. Waiting for session to begin.
    8 MediaEnded Media item has completed playback.
    9 Transitioning Preparing new media item.
    10 Ready Ready to begin playing.
    11 Reconnecting Reconnecting to stream.
  • ASX Elements Reference - MSDN
    Advanced Stream Redirector (ASX) files are based on the Extensible Markup Language (XML) syntax, and are made up of various elements with their associated tags and attributes.

 

[JS]取消事件

Posted In: , . By 卡西卡

重點:

  • Firefox沒有window.event的物件,必須透過addEventListener才能把event當成參數傳入function中。

可共用:

  • 無

IE可用:

Firefox可用:

[SCRIPT]
window.onload = function() {
  addEvent(document.getElementById("form1"), "submit", checkForm);
}

function checkForm(e) {
  var obj = null;
  if ( e.srcElement ) {
    obj = e.srcElement;
  } // if
  else if ( e.target ) {
    obj = e.target;
  } // else if

  // 取消submit
  cancelEvent(e);
}

function cancelEvent(e)
{
  if ( e && e.preventDefault ) {
    // Firefox
    e.preventDefault();
    e.stopPropagation();
  } // if
  else {
    // IE
    e.cancelBubble=true;
    e.returnValue = false;
  } // else
  return false;
}

function addEvent(obj, evType, fn)
{
  if (obj.addEventListener) {
    obj.addEventListener(evType, fn, false);
    return true;
  } // if
  else if (obj.attachEvent) {
    var r = obj.attachEvent("on"+evType, fn);
    return r;
  } // else if
  else {
    return false;
  } // else
}
[/SCRIPT]
另一種方法: [SCRIPT]
function fnTest(evt) {
  evt=evt?evt:(window.event?window.event:null);
  printObject(evt);
}
function printHTML(str) {
  var div = document.getElementById('divMsg');
  div.innerHTML = str;
}
function printObject(obj) {
  var s = "";
  for(att in obj) s += ("<li>"+att+"="+obj[att]+"</li>");
  printHTML("<ol>"+s+"</ol>");
}
[/SCRIPT]
[BODY]
<input type="button" id="btnSave" value="TEST" onclick="fnTest(event);"/>
<div id="divMsg">divMsg</div>
[/BODY]

參考資料:

 

可共用:

  • obj.innerHTML

IE可用:

  • outerHTML
  • innerText

Firefox可用:

  • textContent
[SCRIPT]
function print(str) {
  var div = document.getElementById('divMsg');
  if ( div.innerText ) {
    // IE
    div.innerText = str;
  } // if
  else {
    // FireFox
    div.textContent = str;
  } // else
}
function printHTML(str) {
  var div = document.getElementById('divMsg');
  div.innerHTML = str;
}
[/SCRIPT]

 

[JS]getAttribute

Posted In: , . By 卡西卡

可共用:

IE可用:

  • obj.msg, obj['msg']
[SCRIPT]
function fnTest() {
  var obj = document.getElementById('txtStr');
  var msg = obj.getAttribute("msg");
  print(obj.id+'='+obj.value+','+msg );
}
[/SCRIPT]

[BODY]
<form>
<input type="text" id="txtStr" value="123-Abc" msg="測試" />
<input type="button" id="btnSave" value="TEST" onclick="fnTest();"/>
<br />
<div id="divMsg">divMsg</div>
</form>
[/BODY]