çŸåšããã¹ãŠã®äž»èŠãªãã©ãŠã¶ã§ãããã°ããŒã«ã䜿çšã§ããŸãã
- Firefoxã«ã¯æåãªFirebugæ¡åŒµæ©èœããããŸã
- IE8ã«ã¯çµã¿èŸŒã¿ã®éçºè ããŒã«ãä»å±ããŠããŸã
- Opera 9.5+ã¯Dragonflyãããã¬ãŒããµããŒãããŸã
- Safariã«ã¯ã Drosera JSãããã¬ãŒãšWebInspector DOMãã¥ãŒã¢ãŒããããŸãã æè¿ã®ããŒãžã§ã³ã§ã¯ããããã¬ãŒã¯WebInspectorã«çµ±åãããŠããŸãã
FirebugãšDragonflyã¯çŸåšæãå®å®ããŠããŸãã IE8ãŠãŒãã£ãªãã£ã¯ãã¬ãŒã¯ãã€ã³ããç¡èŠããå Žåãããããã®èšäºã®å·çæç¹ã§ã¯ãWebInspectorã«ã¯ææ°ã®Webkitãã«ããšã®äºææ§ã®åé¡ããããŸãã
ãããã°ããŒã«ãåŠç¿ããŸããã©ã®ãã©ãŠã¶ã§æ¬¡ã®ãšã©ãŒãçºçãããã¯ããããŸããã ãããã¬ãŒã®æ©èœã¯ã»ãŒåçã§ãããããå°ãªããšã1ã€ã䜿çšããæ¹æ³ãããã£ããããã«åãæ¿ããããšãã§ããŸãã
ãããã°æè¡ã
ç¹å®ã®åé¡ã«ã¶ã€ãã£ãå Žåãéåžžã¯æ¬¡ã®æé ãå®è¡ããŸã
- ãããã¬ãŒã®ã³ãŒããã¥ãŒãã€ã³ã§é©åãªã³ãŒããèŠã€ãã
- æœåšçã«åé¡ããããšæãããå Žæã«ãã¬ãŒã¯ãã€ã³ããŸãã¯ãã€ã³ããèšå®ããŸã
- ããŒãžããªããŒãããããã€ãã³ããã³ãã©ãŒã§ããå Žåã¯ãã¿ã³ãã¯ãªãã¯ããŠãã¹ã¯ãªãããå床å®è¡ããŸãã
- ãããã¬ãŒã®å®è¡ãåæ¢ããã¹ããããã€ã¹ãããã®ã³ãŒãå®è¡ãæå¹ã«ãªãã®ãåŸ ã¡ãŸãã
- å€æ°ã®å€ã調ã¹ãŸãã ããšãã°ãäœããã®çç±ã§æªå®çŸ©ã®å€æ°ãæ¢ããŸãããã ããå€ãå«ãå¿ èŠããããããfalseããè¿ãå¿ èŠããããŸããããtrueããè¿ããšäºæ³ãããŸãã
- å¿ èŠã«å¿ããŠãã³ãã³ãã©ã€ã³ã䜿çšããŠã³ãŒããèšç®ããããå€æ°ã®å€ãå€æŽããŸã
- åé¡ã®åå ãšãªã£ãã³ãŒãã®éšåã調ã¹ãŠåé¡ãèŠã€ããæé€ããŸãã
ãã¬ãŒã¯ãã€ã³ããäœæããã«ã¯ãç¹å¥ãªãããã¬ãŒåœä»€ãã³ãŒãã«è¿œå ããããšãã§ããŸãã
function frmSubmit( event ){
event = event || window. event ;
debugger;
var form = this ;
}
å¿ èŠæ¡ä»¶
ã»ãšãã©ã®ãããã¬ãŒã§ã¯ãã³ãŒããé©åã«ãã©ãŒãããããå¿ èŠããããŸãã ã1è¡ã§ãèšè¿°ãããã¹ã¯ãªããã¯ãè¡ããšã®ãããã¬ãŒã§ã®ãšã©ãŒã®æ€åºã劚ããŸãã é£èªåãããã³ãŒãã¯ãããã°ããã®ãéåžžã«é£ãããç¹ã«ããã¯ãããŠããŸãã å€ãã®JavaScriptã©ã€ãã©ãªã䜿çšãããšãããã±ãŒãžåãããããŒãžã§ã³ãšé£èªåãããããŒãžã§ã³ããŸãã¯éåžžã®åœ¢åŒã®ããŒãžã§ã³ãéžæã§ããŸãããã¡ãããææ°ã®ã¹ã¯ãªããããããã°ããå¿ èŠããããŸãã
ãããã°ãã¢
ééããèŠã€ããŠä¿®æ£ããæ¹æ³ãåŠã¶ããã«ãå°ããªãç¹ã«ãæãããã®ãããäŸããå§ããŸãããã ç§ãã¡ã®äŸã¯ãã°ã€ã³ããŒãžã§ãã
ãã®ä¿¡ããããªãã»ã©ã®æ°ããWebã¢ããªã±ãŒã·ã§ã³ã«åãçµãã§ããããã¹ã¿ãŒãã次ã®ãšã©ãŒã®ä¿®æ£ãæ±ãããããšæ³åããŠãã ããã
- ãèªã¿èŸŒã¿äž...ãã¢ããªã±ãŒã·ã§ã³ã®èªã¿èŸŒã¿ãçµäºããŠããã¹ããŒã¿ã¹ããŒã®ã¡ãã»ãŒãžã¯æ¶ããŸããã
- IEããã³Firefoxã®è±èªããŒãžã§ã³ã§ããããã©ã«ãã®èšèªã¯ãã«ãŠã§ãŒèªã§ãã
- ã³ãŒãã®ã©ããã§ãã°ããŒãã«å€æ°propã圢æãããŸããïŒæª-çŽPerãïŒã
- äœããã®çç±ã§ãDOMãã¥ãŒã¢ã§ã¯ããã¹ãŠã®èŠçŽ ã«å±æ§ãã¯ããŒã³ãããããŸãã
ãããã¬ãŒã®å®è¡
- Firefoxã§ã¯ãFirebugæ¡åŒµæ©èœãã€ã³ã¹ããŒã«ãããŠããããšã確èªããå¿ èŠããããŸãã ãããŒã«ã>ãFirebugã>ãFirebugãéãããéžæããŸãã
- Opera 9.5以éã§ã¯ããããŒã«ã>ã詳现ã>ãéçºããŒã«ããéžæããŸãã
- ããŒã¿IEã§ã¯ããããŒã«ã>ãããã«ã>ããã©ãŠã¶ããã«ã>ãIEéçºè ããŒã«ããŒããéžæããŸãã
- SafariãŸãã¯WebKitã§ãæåã«ãããã°ã¡ãã¥ãŒãæå¹ã«ãïŒ1ïŒ ã次ã«[ãã¶ã€ã³]> [Webã€ã³ã¹ãã¯ã¿ãŒã衚瀺]ãéžæããŸãã
ãããã¬ãŒãå®è¡ããŸãã äžéšã®æé ã§ã¯ã³ãŒããå€æŽããå¿ èŠãããããããã¹ãããŒãžãä¿åãããã£ã¹ã¯ãããã©ãŠã¶ã«ããŒãããæ¹ãé©åã§ãã
ãšã©ãŒçªå·1ïŒã¡ãã»ãŒãžãèªã¿èŸŒã¿äž...ã
ãããã°ãããã¢ããªã±ãŒã·ã§ã³ãèŠããšãæåã«å³1ã«ç€ºãããŠãããã®ã衚瀺ãããŸãã


å³ 1ïŒããããDragonflyãšFirebugã§ã®JavaScriptã¢ããªã±ãŒã·ã§ã³ã®æåã®å€èŠ³ã
ãããã¬ã§ãœãŒã¹ã³ãŒããèŠããšãã¯ãã³ãŒãã®æåã«ããclearLoadingMessageïŒïŒé¢æ°ã«æ³šæããŠãã ããã ããã¯ãã¬ãŒã¯ãã€ã³ãã«é©ããå Žæã§ãã
眮ãæ¹ïŒ
- è¡çªå·ã®å·ŠåŽã®ãã£ãŒã«ããã¯ãªãã¯ããŠãclearLoadingMessageïŒïŒé¢æ°å ã®æåã®è¡ã«ãã¬ãŒã¯ãã€ã³ããèšå®ããŸãã
- ããŒãžããªããŒãããŸãã
泚æïŒãã¬ãŒã¯ãã€ã³ãã¯ãé¢æ°ã®èµ·åæã«å®è¡ãããã³ãŒãã®è¡ã«èšå®ããå¿ èŠããããŸãã clearLoadingMessageïŒïŒãå«ãæåå{ããã¯åãªãé¢æ°å®çŸ©ã§ããããé©åããŸããã ããã«ãã¬ãŒã¯ãã€ã³ããèšå®ãããšããããã¬ãŒã¯ããã§åæ¢ããŸããã代ããã«ãé¢æ°å ã«ãã¬ãŒã¯ãã€ã³ããèšå®ããå¿ èŠããããŸãã
ããŒãžããªããŒãããããšãã¹ã¯ãªããã®å®è¡ãåæ¢ããå³2ã«ç€ºãå 容ã衚瀺ãããŸãã


å³ 2ïŒãããã¬ãŒã¯clearLoadingMessageå ã®ãã¬ãŒã¯ãã€ã³ãã§åæ¢ããŸããã
é¢æ°ã³ãŒããèŠãŠã¿ãŸãããã ã芧ã®ãšããã2ã€ã®DOMèŠçŽ ãæŽæ°ããã31è¡ç®ã«statusbarãšããåèªãèšèŒãããŠããŸãã getElementsïŒ 'p'ã{'class'ïŒ 'statusbar'}ïŒã®ããã«èŠããŸã[0] .innerHTMLã¯DOMããªãŒã§statusbarèŠçŽ ãæ¢ããŸãã ä»®å®ãã©ã®ããã«ãã°ãããã¹ãããŸããïŒ
確èªããã«ã¯ããã®æ瀺ãã³ãã³ãã©ã€ã³ã«è²Œãä»ããŸãã å³3ã¯ã調ã¹ãŠããã³ãã³ãã«ãã£ãŠè¿ãããinnerHTMLèŠçŽ ãŸãã¯outerHTMLèŠçŽ ãèªã¿åã£ãåŸã®3ã€ã®ã¹ã¯ãªãŒã³ã·ã§ããïŒDragonflyãFirebugãããã³IE8ïŒã瀺ããŠããŸãã
確èªããã«ã¯ã次ãå®è¡ããŸãã
- ã³ãã³ãã©ã€ã³ãèŠã€ããŸãïŒ
* Firebugã§ããã³ã³ãœãŒã«ãã¿ãã«åãæ¿ããŸãã
* Dragonflyã§ã¯ãJavaScriptã³ãŒãããŒã®äžã衚瀺ããŸãã
* IE8ã§ã¯ãå³åŽã®ãã³ã³ãœãŒã«ãã¿ããèŠã€ããŸãã
- getElementsïŒ 'p'ã{'class'ïŒ 'statusbar'}ïŒ[0] .innerHTMLãã³ãã³ãã©ã€ã³ã«æ¿å ¥ããŸãã
- EnterããŒãæŒããŸãã



å³ 3ïŒDragonflyãFirebugãããã³IE8ã§ã®ã³ãã³ãåºåã
ã³ãã³ãã©ã€ã³ã¯ãã³ãŒãã®å°ããªéšåããã°ãã確èªã§ããéåžžã«äŸ¿å©ãªããŒã«ã§ãã Firebugã³ã³ãœãŒã«ã®çµ±åã¯éåžžã«äŸ¿å©ã§ããããŒã ããªããžã§ã¯ãã衚瀺ãããšãéåžžã«ã€ã³ããªãžã§ã³ããªãã¥ãŒãåŸãããŸãã ããšãã°ãDOMãªããžã§ã¯ãã®å ŽåãããŒã¯ã¢ãããããçµæã衚瀺ãããŸãã
ã³ã³ãœãŒã«ã䜿çšããŠããã詳现ãªèª¿æ»ãè¡ãããšãã§ããŸãã åŠç¿ããŠããJavaScriptæååã¯ã次ã®3ã€ã®ããšãè¡ããŸãã
- statusbarèŠçŽ ãžã®åç §ãååŸããŸãã
- firstChildãã€ãŸããã®æ®µèœã®æåã®ããŒããèŠã€ããŸãã
- innerTextããããã£ãèšå®ããŸãã
åã®ã³ãã³ã以å€ã®ãã³ã³ãœãŒã«ã§å®è¡ããŠã¿ãŸãããã ããšãã°ãæ°ããå€ãå²ãåœãŠãããåã«ãinnerTextããããã£ã®çŸåšã®å€ãäœãã調ã¹ãããšãã§ããŸãã 調ã¹ãããã«ãã³ãã³ãã©ã€ã³ã®ã=ãèšå·ãŸã§ã³ãã³ãå šäœãå ¥åã§ããŸãã
getElements( 'p' , { 'class' : 'statusbar' } )[0].firstChild.innerText
é©ããåºå...äœããªãã ãããã£ãŠãåŒgetElementsïŒ 'p'ã{'classïŒ' statusbar ''}ïŒ[0] .firstChildã¯ãããã¹ããå«ãŸãªãããinnerTextããããã£ãæããªãDOMå ã®äœããã®ãªããžã§ã¯ããæããŸãã
次ã«ã次ã®è³ªåïŒæ®µèœã®æåã®åã¯äœã§ããïŒ ã³ãã³ãã©ã€ã³ã§ãã®è³ªåãããŠã¿ãŸãããã ïŒ4çªç®ã®å³ãåç §ïŒã

å³ 4ïŒãããã¬ãŒSt Dragonflyã®ã³ãã³ãã©ã€ã³ã[ããã¹ããªããžã§ã¯ã]ãåºåããŸãã
Dragonflyã®ãããã¬ãŒåºå-[ããã¹ããªããžã§ã¯ã]ã¯ããããDOMããã¹ãããŒãã§ããããšã瀺ããŠããŸãã ãããã£ãŠãæåã®åé¡ã®åå ãèŠã€ãããŸããã ããã¹ãããŒãã«ã¯innerTextããããã£ããªããããp.firstChild.innerTextã®å€ãèšå®ããŠãäœãå®è¡ãããŸããã ãã®ãšã©ãŒã¯ãinnerTextãnodeValueã«çœ®ãæããããšã§ç°¡åã«ä¿®æ£ã§ããŸããnodeValueã¯ãããã¹ãããŒãã®W3Cæšæºã§å®çŸ©ãããŠããããããã£ã§ãã
ããŠãæåã®ãšã©ãŒãèŠã€ããåŸïŒ
- [F5]ãŸãã¯Runãã¿ã³ãæŒããŠãã¹ã¯ãªãããçµäºããŸãã
- è¡çªå·ãããäžåºŠã¯ãªãã¯ããŠãèšå®ããã³ã³ãããŒã«ãã€ã³ãããªã»ããããããšãå¿ããªãã§ãã ããã
ééã2ïŒèšèªã決å®ããåé¡ã
lang; / * language * /å€æ°ãã¹ã¯ãªããã®å é ã«ããããšã«æ°ä»ãããããããŸããã ãã®å€æ°ã®å€ãèšå®ããã³ãŒããåé¡ã®åå ã§ãããšæ³å®ã§ããŸãã ãããã¬ãŒã«çµã¿èŸŒãŸããŠããæ€çŽ¢æ©èœã䜿çšããŠããã®ã³ãŒããèŠã€ããããšãã§ããŸãã Dragonflyã§ã¯ãæ€çŽ¢ã¯ã³ãŒããã¥ãŒã¢ãŒã®ããäžãFirebugã§ã¯å³äžé ã«ãããŸãïŒå³5ãåç §ïŒã
ããŒã«ãªãŒãŒã·ã§ã³ã®åé¡ãçºçããå¯èœæ§ãããå ŽæãèŠã€ããã«ã¯ã次ã®æé ãå®è¡ããŸãã
- æ€çŽ¢ããã¯ã¹ã«ãlang =ããšå ¥åããŸãã
- langå€æ°ãèšå®ãããŠããè¡ã«ãã¬ãŒã¯ãã€ã³ããèšå®ããŸãã
- ããŒãžããªããŒãããŸãã
WebInspectorã«ã¯éåžžã«äŸ¿å©ãªæ€çŽ¢æ©èœããããŸãã ããŒãžã¬ã€ã¢ãŠããCSSãããã³JavaScriptã³ãŒãã§åæã«æ€çŽ¢ã§ããŸãã ã¹ã¯ãªãŒã³ã·ã§ããã«ç€ºãããã«ãçµæã¯å¥ã®ããã«ã«è¡šç€ºãããããã§ããã«ã¯ãªãã¯ããŠç®çã®å Žæã«ç§»åã§ããŸãã


å³ 5ïŒDragonflyãšWebInspectorãæ€çŽ¢ããŸãã
ãã®é¢æ°ã®æ©èœã確èªããã«ã¯ïŒ
- [ã¹ãããã€ã³]ãã¿ã³ãã¯ãªãã¯ããŠãgetLanguageé¢æ°ãå ¥åããŸãã
- äœåºŠãäœåºŠãã¯ãªãã¯ããŠãã³ãŒããã¹ãããããšã«å®è¡ããŸã
- å€æ°è¡šç€ºãŠã£ã³ããŠã§ãå€ã®å€åã確èªããŸãã
é¢æ°ãå ¥åãããšãnavigator.userAgentãåæããŠããã©ãŠã¶ãŒã®ãŠãŒã¶ãŒãšãŒãžã§ã³ãã®è¡ããèšèªãèªã¿åãããšããè©Šã¿ã衚瀺ãããŸãã
var str1 = navigator.userAgent.match( /\((.*)\)/ )[1];
var ar1 = str1.split(/\s*;\s*/), lang;
for ( var i = 0; i < ar1.length; i++){
if (ar1[i].match(/^(.{2})$/)){
lang = ar1[i];
}
}
ã¹ãããããšã®ã³ãŒãã®åãæž¡ãã®ããã»ã¹ã§ãããŒã«ã«å€æ°ã衚瀺ããããã«ãŠã£ã³ããŠã䜿çšã§ããŸãã å³6ã¯ãFirebugããã³IE8 DTã§ã®å€èŠ³ã瀺ããŠããŸããar1é åãæ¡åŒµããŠããã®èŠçŽ ã確èªããŸãã

å³ 6ïŒFirebug IE8ã®Firebug IE8ã®ããŒã«ã«å€æ°ãã¥ãŒã¢ãŒ
åŒar1 [i] .matchïŒ/ ^ïŒã{2}ïŒ$ /ïŒã¯ããnoãããenããªã©ã®2æåã§æ§æãããæååãåã«æ€çŽ¢ããŸãã ãã ããFirefoxã®ã¹ã¯ãªãŒã³ã·ã§ããã瀺ãããã«ãèšèªæ å ±ã¯ãnn-NOã ïŒ2ïŒãšããŠè¡šç€ºãããŸãã IEã¯ããŠãŒã¶ãŒãšãŒãžã§ã³ãã«èšèªæ å ±ãäžåå ¥åããŸããã
ãããã£ãŠã2çªç®ã®ãšã©ãŒãèŠã€ãããŸãããèšèªã¯ãŠãŒã¶ãŒãšãŒãžã§ã³ãæååã§2æåã®ã³ãŒããæ€çŽ¢ããŠæ±ºå®ãããŸããããFirefoxã«ã¯5æåã®èšèªæå®ããããIEã«ã¯ãŸã£ãããããŸããã ãã®ãããªã³ãŒãã¯ããµãŒããŒåŽã§Accept-Language HTTPããããŒã䜿çšããããnavigator.languageïŒIEã®å Žåã¯navigator.userLanguageïŒããååŸããããšã«ãããæžãæããŠèšèªå®çŸ©ã«çœ®ãæããå¿ èŠããããŸãã ãã®ãããªé¢æ°ãäœã§ãããã®äŸã次ã«ç€ºããŸãã
function getLanguage() {
var lang;
if (navigator.language) {
lang = navigator.language;
} else if (navigator.userLanguage) {
lang = navigator.userLanguage;
}
if (lang && lang.length > 2) {
lang = lang.substring(0, 2);
}
return lang;
}
ééã3ïŒç¥ç§çãªå€æ°ãpropã

å³ 7ïŒã°ããŒãã«å€æ°propã¯ãFirebugããã³Dragonflyã®å€æ°ãã¥ãŒãã€ã³ã«è¡šç€ºãããŸã
å³7ã§ã¯ãå€æ°ãpropããæ確ã«è¡šç€ºãããŠããŸãã é©åã«èšè¿°ãããã¢ããªã±ãŒã·ã§ã³ã§ã¯ãã°ããŒãã«å€æ°ã®æ°ã¯æå°éã«ããå¿ èŠããããŸããããšãã°ãã¢ããªã±ãŒã·ã§ã³ã®2ã€ã®éšåã§åãå€æ°ã䜿çšãããå Žåã«åé¡ãçºçããå¯èœæ§ãããããã§ãã ææ¥ãå¥ã®ããŒã ãã¢ããªã±ãŒã·ã§ã³ã«æ°ããæ©èœãè¿œå ããå€æ°ãpropãã宣èšãããšããŸãã ç°ãªããã®ã«åãååã䜿çšããŠã2ã€ã®ç°ãªãã¢ããªã±ãŒã·ã§ã³ã³ãŒããååŸããŸãã ãã®ç¶æ³ã¯ãå€ãã®å Žåã競åãšãšã©ãŒã«ã€ãªãããŸãã ãã®å€æ°ãèŠã€ããŠãããŒã«ã«ã§å®£èšããããšãã§ããŸãã åã®ã±ãŒã¹ã§è¡ã£ãããã«ããã®æ€çŽ¢ã䜿çšã§ããŸãããããã¹ããŒããªæ¹æ³ããããŸã...
ä»ã®å€ãã®ããã°ã©ãã³ã°èšèªã®ãããã¬ãŒã«ã¯ãç¹å®ã®å€æ°ãå€æŽããããšãã«ãããã°ã¢ãŒãã«ãªãããŠã©ããããšããæŠå¿µããããŸãã FirebugãDragonflyãçŸæç¹ã§ã¯ããªãã¶ãŒããŒãããµããŒãããŠããŸãããã調æ»äžã®ã³ãŒãã®å é ã«æ¬¡ã®è¡ãè¿œå ããããšã§ãåæ§ã®åäœãç°¡åã«ãšãã¥ã¬ãŒãã§ããŸãã
__defineSetter__( 'prop' , function () { debugger; });
以äžãå®è¡ããŸãã
- æåã®ã¹ã¯ãªããã®å é ã«ãããã°ã³ãŒããè¿œå ããŸãã
- ããŒãžããªããŒãããŸãã
- ã¹ã¯ãªãããã©ã®ããã«äžæããããã«æ³šæããŠãã ããã
IE8 DTã«ã¯ããŠã©ãããã¿ãããããŸãããå€æ°ãå€æŽãããŠãäžæã¯ãããŸããã ãããã£ãŠããã®äŸã¯FirefoxãOperaãããã³Safariã§ã®ã¿æ©èœããŸãã
ããŒãžããªããŒããããšããpropãå€æ°ãå®çŸ©ãããŠããå Žæã§ã³ãŒãã®å®è¡ãçŽã¡ã«åæ¢ããŸãã å®éãäžèšã®è¡ãè¿œå ããå Žæã§åæ¢ããŸãã ãã¹ãããã¢ãŠãããã¿ã³ã1åã¯ãªãã¯ãããšãå€æ°ãèšå®ãããŠããå Žæã«ç§»åããŸãã
for (prop in attributes) {
if (el.getAttribute(prop) != attributes[prop]) includeThisElement = false ;
å€æ°propãvarããŒã¯ãŒããªãã§å®£èšãããŠããforã«ãŒããç°¡åã«èŠãããšãã§ããŸãã ã°ããŒãã«ã ãããä¿®æ£ããã®ã¯é£ãããªããvarãè¿œå ããŠãšã©ãŒãä¿®æ£ããã ãã§ãã
ééã4ïŒã¯ããŒã³å±æ§ã
4çªç®ã®ãšã©ãŒã¯ãDOMã€ã³ã¹ãã¯ã¿ãŒã䜿çšããäžçŽãã¹ã¿ãŒã«ââãã£ãŠæããã«çºèŠãããŸããããã®ååšã¯ãã¢ããªã±ãŒã·ã§ã³ã®ãŠãŒã¶ãŒã€ã³ã¿ãŒãã§ã€ã¹ã«çŸããªãããã§ãã DOMã€ã³ã¹ãã¯ã¿ãŒãéããšïŒFirebugã§ã¯ãHTMLãã¿ããDragonflyã§ã¯ãDOMããšåŒã°ããŸãïŒãå€ãã®èŠçŽ ã«cloneå±æ§ããããŸãããããã§ã¯ãªãã¯ãã§ãã

å³ 8ïŒDragonflyã®DOMã€ã³ã¹ãã¯ã¿ãŒã«åé¡ã³ãŒãã衚瀺ãããŸãã
ããã¯ã¢ããªã±ãŒã·ã§ã³ã®ãŠãŒã¶ãŒã«ã¯ãŸã£ãã圱é¿ãäžããªãããããã®ãã°ãæ·±å»ãªãã®ãšèŠãªãããšã¯ã§ããŸããããã¹ã¯ãªãããæ°çŸããã³æ°åã®èŠçŽ ã«å±æ§ãèšå®ãããããããã©ãŒãã³ã¹ã«å€§ããªåœ±é¿ãäžããããšãå¿ããªãã§ãã ããã
ãã®åé¡ãèŠã€ããæãéãæ¹æ³ã¯ãHTMLèŠçŽ ã«cloneãšããå±æ§ãèšå®ããããšãã«èµ·åãããã¬ãŒã¯ãã€ã³ããèšå®ããããšã§ãã ãããã¬ãŒã¯ãããè¡ãããšãã§ããŸããïŒ
JavaScriptã¯éåžžã«æè»ãªèšèªã§ããããã®é·æïŒãŸãã¯ããªãã®èŠç¹ã«å¿ããŠåŒ±ç¹ïŒã®1ã€ã¯ãèšèªã®åºæ¬æ©èœãç¬èªã®ãã®ã«çœ®ãæããããšãã§ããããšã§ãã ãã®ã³ãŒããããŒãžã«è¿œå ãããšãsetAttributeã·ã¹ãã ã¡ãœããããªãŒããŒã©ã€ãããããã¯ããŒã³ãããããã£ãèšå®ããããšãã«ã³ãŒããåæ¢ããŸãã
var funcSetAttr = Element.prototype.setAttribute; /* */
Element.prototype.setAttribute = function (name, value) {
if (name == 'clone' ) {
debugger; /* */
}
funcSetAttr.call( this ,name,value); /* , */
};
ãã®ããã以äžãå®è¡ããŸãã
- äžèšã®ã³ãŒããããŒãžã®æåã®ã¹ã¯ãªããã®å é ã«è¿œå ããŸãã
- ããŒãžããªããŒãããŸãã
åèµ·ååŸãã¹ã¯ãªããã¯DOMããªãŒã®åŠçãéå§ããŸããããbadãå±æ§ãèšå®ããããšããã«åæ¢ããŸãã ïŒFirefoxã®çŸåšã®ããŒãžã§ã³ã§ã¯ãsetAttributeã®å®è£ ã¯èŠçŽ ããšã«ç°ãªããŸããäžèšã®ã³ãŒãã¯åžžã«Operaã§ã®ã¿åäœããŸããFirefoxã§åãå¹æãåŸãã«ã¯ãElementãšããåèªãHTMLFormElementã«çœ®ãæããŠããå ·äœçãªãã®ããªãŒããŒã©ã€ãã§ããŸãHTMLFormElement.prototype.setAttributeã¡ãœããïŒã
å®è¡ããã¬ãŒã¯ãã€ã³ãã§åæ¢ãããšãsetAttributeïŒïŒåŒã³åºããçºçããå ŽæãèŠã€ããå¿ èŠããããŸããã€ãŸããé¢æ°åŒã³åºããã§ãŒã³ã®äžäœã¬ãã«ã«æ»ããããã§äœãèµ·ãããã確èªããå¿ èŠããããŸãã ããã«ã¯åŒã³åºãã¹ã¿ãã¯ã䜿çšã§ããŸãã

å³ 9ïŒDragonflyããã³IE8ã®ã¹ã¿ãã¯ãåŒã³åºããŸãã
å³10ã¯ãFirebugã®ã¹ã¿ãã¯ã瀺ããŠããŸãã ãã¡ã€ã«åã®æšªã®ã setAttribute <makeElement <init ãè¡ã§ã巊端ãçŸåšã®é¢æ°ã§ãã

å³ 10ïŒFirebugã®åŒã³åºãã¹ã¿ãã¯ã å·ŠåŽã§åŒã³åºãããææ°ã®é¢æ°ã
ã¹ã¿ãã¯å ã®é¢æ°ã®ååãã¯ãªãã¯ãããšããã®æç¹ã§ã©ã®ããã«çµãã£ãããå€æã§ããŸãã ã©ã®ããã«æ©èœããããç解ããããã«ãèªåã§è©ŠããŠã¿ãããšãéåžžã«éèŠã§ãã ã¹ã¿ãã¯ã«æ²¿ã£ãŠç§»åãããšãããŒã«ã«å€æ°ããã«ã®å 容ãæŽæ°ãããéžæããé¢æ°ãå®è¡ãããšãã®ã¹ããŒã¿ã¹ã衚瀺ãããããšã«æ³šæããŠãã ããã
åŒã³åºãã¹ã¿ãã¯ã䜿çšããŠåé¡ã®ããæ©èœãèŠã€ããæ¹æ³ïŒ
- 衚瀺ããã¹ã¿ãã¯äžã®é¢æ°ã®ååãã¯ãªãã¯ããŸãã
- ããŒã«ã«å€æ°ã¯ãéžæããã³ã³ããã¹ãã«ããå€ã«æŽæ°ãããããšã«æ³šæããŠãã ããã
- ã¹ããããã¿ã³ã䜿çšãããšãã¹ã¿ãã¯ã®å¥ã®éšåã«ããå Žåã§ãããã¬ãŒã¯ãã€ã³ãã®ãã€ã³ããã移åããããšã«æ³šæããŠãã ããã
makeElementãéžæãããšãã³ãŒãã®å¥ã®éšåã«ç§»åããŸãã
for ( var prop in attributes) {
el.setAttribute(prop, attributes[prop]);
}
setAttributeåŒã³åºãã衚瀺ãããŸãã ããŒã«ã«å€æ°ããã«ã¯ããpropãå€æ°ã®å€ãå®éã«ãã¯ããŒã³ãã§ããããšã瀺ããŠããŸãã å€æ°propã¯for ... inã«ãŒãã§å®çŸ©ãããŸãã ããã¯ãããããå±æ§ããªããžã§ã¯ãã®ããããã£ã®1ã€ã§ããããšã瀺ããŠããŸãã ãã®ãªããžã§ã¯ãã¯ã2çªç®ã®ãã©ã¡ãŒã¿ãŒã«ãã£ãŠé¢æ°ã«æž¡ãããŸãã ã¹ã¿ãã¯ã1ã¬ãã«äžã«ç§»åãããšã次ã®ã³ãŒãã衚瀺ãããŸãã
var form = makeElement('form', { action:'/login', method:'post', name:'loginform' } , document .body);
ã¡ãœããã®2çªç®ã®ãã©ã¡ãŒã¿ãŒã¯å€ªåã§åŒ·èª¿è¡šç€ºãããŠããŸã-ãã®ãªããžã§ã¯ãã«ã¯cloneããããã£ããããŸããã ããã¯ã©ãããæ¥ãã®ã§ããïŒ
makeElementé¢æ°ã«æ»ã£ãŠãå±æ§å€æ°ãšãã®ãã¯ããŒã³ãããããã£ã詳ããèŠãŠã¿ãŸãããã ãã®ããããã£ã®å€é¢æ°ãã¯ãªãã¯ãããšãå²ãåœãŠãããŠããå Žæã«ç§»åã§ããŸããéã§åŒ·èª¿è¡šç€ºãããŸã

å³ 11ïŒFirebugã¯ãã¯ããŒã³ããããã£ãå®çŸ©ãããå Žæã瀺ããŸãã
ãã®ããã4çªç®ã®ãšã©ãŒã®åå ãèŠã€ããŸããïŒObject.prototypeã䜿çšããŠcloneã¡ãœããããã¹ãŠã®ãªããžã§ã¯ãã«è¿œå ãããŸãã ãªããžã§ã¯ãã®ã«ãŒãã®for ...ã§ã¯ãObject.prototypeã§èšå®ãããã¹ãŠã®ããããã£ã衚瀺ãããããããã®ã¢ãããŒãã¯æªãç¿æ £ãšèŠãªãããŸãã ããã¯éåžžã«åŸ®åŠãªãšã©ãŒã«ã€ãªããå¯èœæ§ããããŸãã
ãã®ãšã©ãŒãä¿®æ£ããã«ã¯ã次ã®äŸã«ç€ºãããã«ããªããžã§ã¯ãã®ãããã¿ã€ããããªããžã§ã¯ãèªäœã«cloneã¡ãœãããçŽæ¥ç§»åããobj.cloneïŒïŒãžã®ãã¹ãŠã®åŒã³åºããObject.cloneïŒobjïŒã«çœ®ãæããŸãã
// ,
Object.prototype.clone = function () {
var obj = {};
for ( var prop in this ) {
obj[prop] = this [prop];
}
return obj;
}
// . clone():
var myObj1 = { 'id' : '1' };
var myObj2 = myObj1.clone();
次ã®ããã«æ¹åããŠãã ããïŒ
Object.clone = function (originalObject) {
var obj = {};
for ( var prop in originalObject) {
obj[prop] = originalObject[prop];
}
return obj;
}
// . clone():
var myObj1 = { 'id' : '1' };
var myObj2 = Object.clone(myObj1);
* All source code was highlighted with Source Code Highlighter .
ãã®èšäºã®äžéšãç解ããã䜿çšãããããã®ã«åé¡ãããå Žåã¯ãå¿é ããªãã§ãã ããïŒ åºæ¬ããã¹ã¿ãŒããããšã§ãããªãã¯ãããããã§ãã·ã§ãã«ãªéçºè ã«ãªããæçµçã«ã¯äœ¿çšããããã®ç¬èªã®æè¡ã»ãããéçºããŸãã
泚é
1 Safariã§ãããã°/éçºã¡ãã¥ãŒãæå¹ã«ããã«ã¯ã[ç·šé]-> [èšå®]-> [詳现]ã«ç§»åãã[éçº]ã¡ãã¥ãŒãæå¹ã«ããŸãããã®åŸããã©ãŠã¶ã¡ãã¥ãŒã«[éçº]é ç®ã衚瀺ãããŸãã ïŒïŒã
2ãã·ã¢èªã®å Žåãããã¯å®å šã«é¢é£ããããã§ã¯ãªããã³ãŒãã¯æ©èœããŸãã FFã§ã¯ãã³ãŒãã¯ãruãã®ããã«èŠããŸãã ããããããã¯ãã·ã¢äººã1人ããã«ãŠã§ãŒäººã2人ããããã§ãã ä»ã®æ¬ ç¹ãšã¯å¥ã«ãã³ãŒããä»ã®èšèªã§äœ¿çšããå Žåããããè¡ãã¹ãã§ã¯ãããŸãã