IE='\v'=='v'

2009.01.30 19:29 from [IT] Web Tech
[code:js]
IE='\v'=='v'
IE인지 확인하는 가장 짧은 방법입니다(8버전 포함). 다른 방법으로는 아래의 코드도 있습니다.
[code:js]
IE=top.execScript?1:0
흠 :)
Gareth Heyes씨는(v 트릭을 만든 사람) 이 트릭에 대해 포스팅하면서 여러 브라우저를 판별할 수 있는 한 줄 코드를 만들었습니다.
[code:js]
B=(function x(){})[-5]=='x'?'FF3':(function x(){})[-6]=='x'?'FF2':/a/[-1]=='a'?'FF':'\v'=='v'?'IE':/a/.__proto__=='//'?'Saf':/s/.test(/a/.toString)?'Chr':/^function \(/.test([].sort)?'Op':'Unknown'

국내 PHP 개발자 사이트인 PHP 스쿨에도 오늘자로 관련 팁이 게시되었습니다.

from IE='\v'=='v'
Posted by 행복한고니 트랙백 0 : 댓글 0

댓글을 달아 주세요

Michael Mahemof 씨가 HTML을 iframe에 넣고 추출하는 방법에 대해 작성하셨습니다. 원래 TiddlyWiki를 많이 사용하시는 분인데, 소스를 보다가 알게된 방법이라고 합니다. 이것은 그런 일을 하는데에 브라우저 파서를 사용할 수 있게 해줍니다:
[code:js]
// put it in
var doc = iframe.document;
if (iframe.contentDocument)
  doc = iframe.contentDocument; // For NS6
else if(iframe.contentWindow)
  doc = iframe.contentWindow.document; // For IE5.5 and IE6
 
// Put the content in the iframe
doc.open();
doc.writeln(content);
doc.close();
 
// and then get it out
var storeArea = doc.getElementById("storeArea");

from Introducing HTML into an iframe and getting it back
Posted by 행복한고니 트랙백 0 : 댓글 0

댓글을 달아 주세요

[code:css]
#indirect-example1 h4 + p,
#indirect-example2 h4 ~ p {
    background-color: #CCC; color: #F00;
}
Eric Wendelin씨가 상단에 보여지는 것과 같은 일반 형제 결합자(general sibling combinator)에 대해 살펴보셨습니다:
[code:css]
h4 ~ p {}

이 부분은 <h4> 엘리먼트가 앞에 있는 모든 형제 <p> 엘리먼트에 영향을 줍니다. 이는 인접 형제 결합자 (+)가 모든 <p> 형제 대신 직접적으로 인접한 형제에만 영향을 미친다는 점에서 다릅니다. 이 부분은 IE7+, FF2+, Opera 9.5+, Safari 3+, 심지어는 Konqueror 에서도 잘 작동합니다.

from CSS General Sibling Combinator in action
TAG CSS, TIP,
Posted by 행복한고니 트랙백 0 : 댓글 0

댓글을 달아 주세요

Safari 에서 뒤집기

2008.06.10 01:41 from [IT] Web Tech
사용자 삽입 이미지
Thomas Fuchs 씨가 RailsConf 에서 재밌는 것을 보여주셨습니다. 북마클릿을 이용한 새로운 WebKit 변환 예제입니다.
[code:js]
javascript:document.body.style['-webkit-transform']='rotate(180deg)';

javascript:document.body.style['-webkit-transform']='rotate('+prompt('degrees',180)+'deg)';

from Flipping out over Safari on Ajaxian
Posted by 행복한고니 트랙백 0 : 댓글 0

댓글을 달아 주세요

Steven Levithan 씨가 while 루프와 replace 메소드를 이용한 중첩 패턴을 제거하는 간단한 방법에 대해 작성하셨습니다.

[code:js]
var str = "abc&lt;1&lt;2<>3>4>def";
 
while (str != (str = str.replace(/<[^<>]*>/g, "")));
 
// str -> "abcdef"
주의할 것은 이 한줄에 있는 정규식이 중첩 패턴을 전혀 다루지 않는다는 것입니다. while 루프의 조건문은 <..>를(내부에 패턴이 없는 꺽쇠) 공백 문자열로 치환해버립니다. 이는 정규식이 더 이상 일치하지 않을 때까지 안쪽에서 바깥쪽으로 반복됩니다. 이 점에서, 치환 결과는 대상 문자열과 같아지고 루프는 종료됩니다.
[code:js]
var str = "abc(d(e())f)(gh)ijk()",
    re = /\([^()]*\)/,
    output = [],
    match, parts, last;
 
while (match = re.exec(str)) {
    parts = match[0].split("\uFFFF");
    if (parts.length <2)
        last = output.push(match[0]) - 1;
    else
        output[last] = parts[0] + output[last] + parts[1];
    str = str.replace(re, "\uFFFF");
}
 
// output -> ["(d(e())f)", "(gh)", "()"]


from Remove Nested Patterns with One Line of JavaScript on Ajaxian
Posted by 행복한고니 트랙백 0 : 댓글 0

댓글을 달아 주세요

어떤 컨텐트가 다 읽혔는지 비동기적으로 확인하기 위해서 setTimeout 을 호출해본 적이 있습니까? 그런 일은 꽤 자주 일어나는 편인 것 같습니다. Paul Irish씨가 필요한 라이브러리가 읽힌 후에 코드를 실행할 수 있도록 도와주는 간단한 유틸리티를 작성했습니다.

그의 executeWhenLoaded(function, objects, that, must, be, present) 를 이용해 이런 식으로 사용할 수 있습니다:
[code:js]
executeWhenLoaded(function(){
    console.log(session.data);
}, 'session');   // session will return a value when the whatever preceding functionality is done.
구현은 간단하게 되어있습니다:
[code:js]
function executeWhenLoaded(func){
 
  for (var i = 1; i<arguments.length; i++){ // for loop starts at 1 to skip the function argument.
    if (! window[ arguments[i] ]) {
      setTimeout(arguments.callee,50);    
      return;
    }
  }
 
  func(); // only reaches here when for loop is satisfied.
}

from Polling for loaded content instead of simple setTimeout on Ajaxian
Posted by 행복한고니 트랙백 0 : 댓글 0

댓글을 달아 주세요

from Are you sure your unload handler is firing in IE? on Ajaxian

Johan Sörlin씨가 IE에서 때때로 unload 이벤트가 일어나지 않는다는 사실을 발견했습니다:

우리는 최근에 특정 웹사이트에서 unload 이벤트가 일어나지 않는 IE의 심각한 버그를 발견했습니다. 버그를 추적한 결과, unload 이벤트는 페이지가 미처 다 로딩되기 전에 우리가 다른 페이지로 이동했기 때문에 일어나지 않는 거였습니다.

이 문제는 꽤 중요한데, unload 이벤트가 IE의 순환 참조 메모리 누수를 방지하기 위해서 일반적으로 사용되기 때문입니다. 따라서, 만약 페이지의 컨텐트 로딩이 완료되기 전에 페이지를 벗어난다면 이 버그는 IE에서 unload 이벤트에 의존하는 모든 Ajax 라이브러리/프레임웍이 제대로 동작하지 않도록 만들 것입니다.

버그 샘플이 있습니다, 페이지를 IE에서 실행하고 페이지에 있는 과정을 따라 해보세요.

그가 작업한 것입니다:
function fixUnload() {
        // Is there things still loading, then fake the unload event
        if (document.readyState == 'interactive') {
                function stop() {
                        // Prevent memory leak
                        document.detachEvent('onstop', stop);
                        // Call unload handler
                        unload();
                };
                // Fire unload when the currently loading page is stopped
                document.attachEvent('onstop', stop);
                // Remove onstop listener after a while to prevent the unload function
                // to execute if the user presses cancel in an onbeforeunload
                // confirm dialog and then presses the stop button in the browser
                window.setTimeout(function() {
                        document.detachEvent('onstop', stop);
                }, 0);
        }
};

function unload() {
        alert('Unload event occured.');
};

window.attachEvent('onunload', unload);
window.attachEvent('onbeforeunload', fixUnload);

또 다른 IE 소식입니다. IE6에서 문제가 되므로, CSS 클래스 이름에 (유효한) _ 문자를 사용하면 안되다는 것을 명심하세요.
Posted by 행복한고니 트랙백 0 : 댓글 2

댓글을 달아 주세요

  1. addr | edit/del | reply BlogIcon 허만재 2009.02.06 11:18

    좋은글 좀 퍼가겠습니다.
    건승하세요