ã¯ããã«
2010 å¹´ 9 æ 15 æ¥ãæã¡ã¾ãã¦ããµã¤ãã¦ãºã»ã©ããéè·ããããã¾ããã
å ±åãå
¼ãã¦ãä¹
ãã¶ãã«ããã°ãæ¸ãã¦ã¿ããã¨æãã¾ãã

ï¼åçã¯ããããã¹ã¼ããã§ãï¼
ãã®ä¼ç¤¾ã«å ¥ã£ã¦ãããããã®å¦ã³ã¨æãåºãããã¾ããã
ãã®ä¸ã¤ä¸ã¤ãã¾ã¨ãã¦ãããã°ãç´ æ´ãããè¨äºã«ãªãã®ããããã¾ããããåã¯æç« ãè¦æã§ãã
ã§ãã®ã§ããã¾ãéè·ã®ã¨ã³ããªãæ¸ãä¸ãããã¨ãã§ãã¾ããã
è¨èã«ã§ããªãããããªæãã§ãã
ãªã®ã§ããã®ã¨ã³ããªã¯ãµã¤ãã¦ãºã»ã©ãããµã¤ãã¦ãºæ¬ç¤¾ã®ä»²éãã¡ã¸ã®ãããã¨ãã®æ°æã¡ãããã¦ãèªåãããæå¾ã¾ã§ JavaScript ã®ãã¨ãæ¸ãããã¨æãã¾ãã
ãµã¤ãã¦ãºã§ã®æå¾ã®ä»äº
åã«ã¨ã£ã¦ããµã¤ãã¦ãºã§ã®æå¾ã®ä»äºã¯ãJavaScript ã§æ°ããã¦ã¼ã¶ã¼ã¤ã³ã¿ãã§ã¼ã¹ãä½ããã¨ãã§ããã
ããã¦ããã®ä¸ã§å§ãã¦è¤æ°äººã«ããå¤§è¦æ¨¡ãª JavaScript ã®éçºã¨ããã®ãè¡ãã¾ããã
å¤§è¦æ¨¡ã¨è¨ã£ã¦ããã½ã¼ã¹ã³ã¼ãä¸ä¸ãäºä¸è¡ç¨åº¦ãããã°ã©ãã¼ 3 人ãããã®è¦æ¨¡ãªã®ã§ããå¤§è¦æ¨¡ãã¨ããã¨éåæã®ãã人ãå¤ãããããã¾ããã
ãã ãåã®ä¸ã§ã¯äººçã§ä¸çªå¤§è¦æ¨¡ãª JavaScript ã®éçºã§ãã£ããã¨ã¯ééãããã¾ããã§ããã
ãã®ãããªæ©ä¼ã¯ããªããªããªãã¨æãã¾ãã®ã§ãã®éçºã§å¦ãã ãã¨ãæ¸ãã¦ããããã¨æãã¾ãã
å¤§è¦æ¨¡ JavaScript éçºã®ä¸ã§å¦ãã ãã¨
å¤§è¦æ¨¡ãª JavaScript éçºã§æ§ã ãªãã¨ãå¦ã³ã¾ããã
- JavaScript ã¨ããèªç±åº¦ã®é«ãããã°ã©ãã³ã°è¨èªã®ä¸ã§ã©ããã£ã¦ã³ã¼ããå ±æãã¦ããã
- ãããã°ãã©ã®ããã«ãã£ã¦ããã
- ããã©ã¼ãã³ã¹ãã¥ã¼ãã³ã°ãã©ãããã
大ã¾ãã«ããã¨ãã®ä¸ç¹ã§ããããã
JavaScript ã¨ããèªç±åº¦ã®é«ãããã°ã©ãã³ã°è¨èªã®ä¸ã§ã©ããã£ã¦ã³ã¼ããå ±æãã¦ããã
JavaScript ã¯éå¸¸ã«æè»ã§èªç±åº¦ã®é«ãããã°ã©ãã³ã°è¨èªã§ãã
ãã¨ãã°ã jQuery ã§æ¸ã JavaScript 㨠Prototype.js ã§æ¸ãJavaScript ã®ã³ã¼ããå
¨ç¶éããã®ã«è¦ããããã«æ§ã
ãªæåã®æ¸ãæ¹ããããã¨ãã§ãããããã¾ãã
ãã®ãããªç¶æ³ã§ã¯ã³ã¼ãããã£ã¡ããã¡ãã«ãªããããã§ãã
ãªã®ã§ããã®å¯¾çã¨ãã¦ä»¥ä¸ã®ãã¨ãããã¾ããã
- åºæ¬ã©ã¤ãã©ãªã®çµ±ä¸
- ååã®è¦åãä½ã
- ãã¡ã¤ã«éã®ä¾å解決ãã©ã¤ãã©ãªã«ä»»ããï¼èªåã§ script è¦ç´ ãæ¸ããªãï¼
- æ¦å¿µããçµµã«æãã¦ã説æã§ãããã¨ãããã¨ãéè¦ãã
- è¤éãªå¦çã¯ãå ±éã®æ¸ãæ¹ã«ãã
ã¾ãããããåã¨ããã°ãããåã®ãã¨ã°ããã§ããã
åºæ¬ã©ã¤ãã©ãªã®çµ±ä¸
JavaScript ã§ã¯ãå¤é¨ã©ã¤ãã©ãªã¨ããã¨ãåºæ¬ã©ã¤ãã©ãªããå¿ç¨ã©ã¤ãã©ãªãã®äºã¤ã«åé¡ããã¾ãã
- åºæ¬ã©ã¤ãã©ãª
- ç¹å®ã®æ©è½ã¨ããããã¯ãããã°ã©ãã³ã°èªä½ãç°¡åã«ããããã®ã©ã¤ãã©ãª
- åºæ¬çã«ãåºæ¬ã©ã¤ãã©ãªãã¯ãã¼ã¸ã«ä¸ã¤ã ã
- åºæ¬ã©ã¤ãã©ãªå士ã¯ãä¸ç·ã«ä½¿ã㨠DOM 2 Event å¨ãã® API ã§ä¸å ·åãèµ·ãããã¨ããã
- ä¾ãã° jQuery ã Prototype.js ã Google Closure ã Dojo toolkit ãªã©ãªã©
- å¿ç¨ã©ã¤ãã©ãª
- ããç¹å®ã®æ©è½ãæã£ãã©ã¤ãã©ãª
- ã·ã³ãã«ã«ãã®æ©è½ã ããå®è£ ãããã®ãå¤ããæåã©ããã®åºæ¬ã©ã¤ãã©ãªã¨ã¯è¡çªããªãããã«ä½ããã¦ãããã¨ãå¤ã
- ä¾ãã° Scriptaculous ã JavaScript User Agent Identfier ã JavaScript-XPath ãªã©ãªã©
ãµã¤ãã§ä¸ã¤ã®ãåºæ¬ã©ã¤ãã©ãªããã¡ããã¨æ±ºãã¦éçºãããããã¨ãããã¨ã§ãã
ã¾ããå½ããåã£ã¡ãå½ããåã£ã§ããã
ä»åã¯ãGoogle Closureãã使ãã¾ããã
çç±ã¯ãæ©è½è±å¯ã§ãããããã£ããã¨ãåºæ¥ããããã§ãã
ã§ããã£ã±ãã人ã«ãã£ã¦ã¯ããã¼ã jQuery 使ããããã¼ï¼ï¼ãã俺ã¯ããã£ã±ã Base2 ã ãã¼ãã¨ãã£ã¦ãªãã®ã§ãããã¯ãã¾ãããããã¾ãã§ï¼ï¼
ååã®è¦åãä½ã
ãã¾ãããããããã¨çª®å±ã«ã¯ãªãã®ã§ããããã£ã±ãè¤æ°äººã§ããã¨ãã¯å¿
è¦ãªãã ã¨æãã¾ããã
ãã¨ãã°ã
// ã¯ã©ã¹åã¯ã¯ã©ã¹ã¯ã¢ããã¼ãã£ã¡ã«ã±ã¼ã¹ã§æ¸ã // åå空éã¯å°æå goog.provide('cybozu.ui.Component'); goog.require('cybozu.mixin'); goog.require('cybozu.assert'); goog.require('goog.event.EventHandler'); // çç¥å¯è½ãªä»®å¼æ°ã«ã¯ãæåã« opt_ ãä»ãã cybozu.ui.Component = function(element, opt_name) { this.eventHandler_ = new goog.event.EventHandler(this); this.element_ = element; this.name_ = opt_name || ''; this.child_ = new cybozu.ui.Component(element.firstChild, 'child'); // ã¤ãã³ãåã¯ãã¯ã¼ã±ã¼ã¹ this.eventHandler_.listen(child, 'dragentertochild', this.handleDragEnterToChild, false); this.eventHandler_.listen(child, 'dragexittochild', this.handleDragexitToChild, false); }; cybozu.mixin(cybozu.ui.Component.prototype, { // å°æ¥å¤æ´ããå¯è½æ§ã®ããååï¼ãã©ã¤ãã¼ããªååï¼ã«ã¯æå¾ã« _ ãä»ããã status_: 'none', hoge_: 'fuga', element_: null, name_: null, // 夿°åãã¡ã½ããåãããããã£åã¯ãã¯ã¼ãã£ã¡ã«ã±ã¼ã¹ evenetHandler_: null, getHoge: function() { return this.hoge_; }, // ã¤ãã³ããªã©ã®ã³ã¼ã«ããã¯ï¼ã¤ãã³ããã³ãã©ï¼ã¨ãã¦ä½¿ãããååã«ã¯ãæåã« handle ãä»ãã handleDragEnterToChild: function(evt) { this.enterChildOver(); }, handleDragExitToChild: function(evt) { this.exitChildOver(); }, // ã¦ã¼ã¶ã¼ã¤ã³ã¿ãã§ã¼ã¹ã®é¨åã®ç¶æ ãå¤åããå ´åã«å¼ã°ããã¡ã½ããåã«ã¯ãæåã« enter ãä»ããã enterChildOver: function() { DEBUG && cybozu.assert(this.status_ === 'none'); this.status_ = 'childover'; this.element_.className = 'childover'; }, // éã«ç¶æ ããã¥ã¼ãã©ã«ãªç¶æ ã«æ»ãå ´åã¯ãæåã« exit ãä»ãã enterChildOver: function() { DEBUG && cybozu.assert(this.status_ === 'childover'); this.element_.className = 'none'; this.status_ = 'none'; }, // ç¶æ ã®ç¢ºèªã¯ isIn ãä»ãã isInChildOver: function() { return this.status_ === 'childover' } });
ã®ã³ã¡ã³ãã«æ¸ãã¦ãããããªååä»ãã§ããã¾ãã
ãã¡ã¤ã«éã®ä¾å解決ãã©ã¤ãã©ãªã«ä»»ããï¼èªåã§ script è¦ç´ ãæ¸ããªãï¼
JavaScript ã®å¦çç³»ã¯ã PHP ã® require_once ã®ããã«ãã¡ã¤ã«éã®ä¾åé¢ä¿ã解決ããæ¹æ³ãæã£ã¦ãã¾ããã
ãããä¾å解決ããããããã°ãå¤é¨ã®ãã¼ã«ã JavaScript èªèº«ã«ä»»ããå¿
è¦ãããã¾ãã
ãã¾ã JavaScript ã使ã£ã¦ããªããã¼ã¸ã®å ´åãã¨ãã«ä¾å解決ãªã©ã¯ããªãã¦ãèªåèªèº«ã§èªã¿è¾¼ã JavaScript ãææ¸ããããã¨ã§è§£æ±ºã§ãã¾ãããå¤§è¦æ¨¡ãªéçºã ã¨ããããããã«ãããã¾ããã
ãã¡ã¤ã«éã®ä¾åè§£æ±ºã®æ¹æ³ã¯ã以ä¸ã® 3 ã¨ããããã¾ãã
| æ¹æ³ | éçºæ | ãªãªã¼ã¹æ | ç¹å¾´ |
|---|---|---|---|
| åæ XMLHttpRequest 㨠eval | â | à | eval ãªã®ã§é ããeval ããç®æã®ã¹ã³ã¼ãã®å½±é¿ãåãããä¾åé¢ä¿ã¯ãå®è¡æã«è¨ç®ããããä¾åé¢ä¿ã®å¤æ´ããã£ãå ´åãªã©ã«ä½ãããªãã¦ããã®ã§ãéçºã楽 |
| åç script è¦ç´ æ¿å ¥ | â³ | â³ | äºåã«ãã¡ã¤ã«éã®ä¾åé¢ä¿ã®æ å ±ã JavaScript ã§èªããå½¢ã®ãã¼ã¿ã«ãã¦ããå¿ è¦ããããä¾åé¢ä¿ãå¤ãã度ã«ãä¾åé¢ä¿ãã¼ã¿ãæ´æ°ããå¿ è¦ãããã |
| ä¾åãããã¹ã¦ã®ãã¡ã¤ã«ãä¸ã¤ã«çµå | à | â | ç¡é§ãªã³ã¹ããä¸åãªãã®ã§æ©ããã³ã¼ããå°ãã§ã夿´ãããåçµåããå¿ è¦ããã |
éçºæã«ã¯ãåæ XMLHttpRequest 㨠evalãããåç script è¦ç´ æ¿å
¥ããåºæ¥ã¦ããªãªã¼ã¹æã«ã¯ãä¾åãããã¹ã¦ã®ãã¡ã¤ã«ãä¸ã¤ã«çµåããåºæ¥ããã¨ãæã¾ããã§ããã
ã¡ãªã¿ã« Google Closure ã§ã¯ãåç script è¦ç´ æ¿å
¥ãã¨ãä¾åãããã¹ã¦ã®ãã¡ã¤ã«ãä¸ã¤ã«çµåããåºæ¥ã¾ãã
Dojo Toolkit ã¯ãåæ XMLHttpRequest 㨠evalãã¨ãä¾åãããã¹ã¦ã®ãã¡ã¤ã«ãä¸ã¤ã«çµåããåºæ¥ããã ã£ãã¨æãã¾ãããããã
æ¦å¿µããçµµã«æãã¦ã説æã§ãããã¨ãããã¨ãéè¦ãã
JavaScript ã§ã¯ãæ§ã
ãªæ¸ãæ¹ãåºæ¥ãã®ã§ãããä»åã¯ã¯ã©ã¹æåã§æ¸ãã¦ã prototype ã®æ¸ãæããç¡å颿°ãåºæ¬çã«ã¯ä½¿ããªãã¨ããã«ã¼ã«ã§ããã¾ããã
ãªãããã®ããã«ãããã¨ããã¨ãæ¦å¿µãçµµã«æãã¦ã説æã§ãããã¨ãããã¨ãéè¦ã ã¨èããããã§ãã
ã¯ã©ã¹æåã 㨠UML ã£ã½ãæ¸ãæ¹ãããããã§ãããã
ãã¨ããæ§ã
ãªç¶æ
ã«ããã¦ååãä»ãããã¨ãããã¨ãããã¾ãããããããç¶æ
é·ç§»å³ãç¶æ
ãããªãã¯ã¹ãæããããããããã§ãã
ãã¨ããåç´ãªã³ã¼ã«ããã¯ããããã¤ãã³ãã使ããã¨ãããã¨ãããã¾ããããããããã¤ãã³ãåãã¨ããååãä»ãã¦ã·ã¼ã±ã³ã¹å³ãæããããããããã§ãã
ãã¨ã¯ã親ã¨åãããã¦æç¢ºã«ããããã¨ããã¤ãã³ãã listen ãã対象ã親ã¨åã ãã«éå®ãããï¼å
å¼ã¸ã® listen ã¯è¦ªãçµç±ããï¼ã¨ãã§ãããã
è¤éãªå¦çã¯ãå ±éã®æ¸ãæ¹ã«ãã
ããã¯ãã¾ãå½ããåã®ãã¨ã£ã¡ãå½ããåã®ãã¨ãªãã§ãããã¾ãæãä½ã«è¨ãã°ãJavaScript ã§ããåºã¦ãããããªãã¶ã¤ã³ãã¿ã¼ã³ã¯ä½¿ãããããã¨ãããã¨ã§ãã
ãã¨ãã° Deferred ãªãããããä¾ããããã¾ãããéåæå¦çã®ã¨ã©ã¼å¦çãæ¸ãã¨ãã«ä¾¿å©ã§ããã
ãããã°ãã©ã®ããã«ãã£ã¦ããã
ãããã°ã¯ãç¹ã«å¤§è¦æ¨¡éçºã«ã¯é¢ä¿ãªãããããã¾ããããã¿ããªã§ãã¦ãã¦ãå
±æãã¦ãããã¨ã¯éè¦ã§ãã
ç¹ã«ä»åã®éçºã§å½¹ã«ãã£ããããã°ãã¦ãã¦ãã¾ã¨ãã¦ããã¾ãã
ã¢ãµã¼ã·ã§ã³ã使ã
ã¦ã¼ã¶ã¼ã¤ã³ã¿ãã§ã¼ã¹ã®ããã«ãã¹ãããããã³ã¼ãã§ã¯ãã¢ãµã¼ã·ã§ã³ã使ãã¨ã³ã¼ãã®è³ªãå¹çããæ¹åã§ãã¾ãã
ã¢ãµã¼ã·ã§ã³ã¨ããã®ã¯ãããã®ã³ã¼ããå®è¡ãã¦ãã¨ãããã¨ã¯ãäºåã«ããããç¶æ
ã«ãªã£ã¦ããã¯ããã¨ãããã¨ã確èªããããã®ã³ã¼ããåãè¾¼ããã¨ãããã¾ãã
ä¾ãã°ã以ä¸ã®ãã㪠assert 颿°ãä½ãã
function assert(condition, opt_message) { if (!condition) { if (window.console) { // ã¡ãã»ã¼ã¸ã®è¡¨ç¤º console.log('Assertion Failure'); if (opt_message) console.log('Message: ' + opt_message); // ã¹ã¿ãã¯ãã¬ã¼ã¹ã®è¡¨ç¤º if (console.trace) console.trace(); if (Error().stack) console.log(Error().stack); } // ãããã¬ã¼ãèµ·åãããã¬ã¼ã¯ãã debugger; } }
ãããã¦ããã¨ãåææ¡ä»¶ãå´©ããæç¹ã§ãããã¬ã¼èµ·åãããã¬ã¼ã¯ããã®ã§ãä¸å
·åã調ã¹ãã®ã楽ã«ãªãã¾ãã
ã¾ãããã®é¢æ°ãå¼ã³åºãéã«ä»¥ä¸ã®ããã«ãã°ãã¼ãã«ãªãã©ã°ããªããã使ã£ã¦ãªãªã¼ã¹æã¯å¼ã°ãªãããã«ãã¦ããã¨ããã§ãããã
var DEBUG = true; // éçºæã¯ true ããªãªã¼ã¹æã¯ false ã«ãã Component.prototype.handleMouseOver = function(evt) { // éçºæã ãã¢ãµã¼ã·ã§ã³ãã DEBUG && assert(this.element_.className === 'out'); this.element_.className = 'over'; }
æ§ã
ãªæ¡ä»¶ãããå ´åã¯ãæ§ã
ãªæ¡ä»¶ãã¾ã¨ãã¦ä¸ã¤ã®ååãã¤ãã¦ããã®ååããç¶æ
åãã¨ãã¾ãã
ããã¦ããã®æ¡ä»¶ãæºããããã¨ãã«ãç¶æ
åãã夿´ãããã®æ¡ä»¶ãå¿
è¦ãªã¨ãã«ãç¶æ
åãã確èªããããã«ãã¾ãã
Component.prototype.enterDragOver = function() { // ç¶æ åã®ç¢ºèª DEBUG && assert(this.status_ === 'dragging'); // ç¶æ åãè¨å® this.status_ = 'dragover'; // ç¶æ dragover ãæºããã¹ãæ§ã ãªæ¡ä»¶ãè¨å® this.element_.style.background = 'red'; this.element_.style.border= 'blue 1px solid'; this.element_.style.boxSizing = 'border-box'; };
ã¨ã©ã¼ã¡ãã»ã¼ã¸ãè¦ãããå³åº§ã«ãã¬ã¼ã¯ãã¤ã³ãã®æ¡ä»¶ãèãã
alert ãããã°ã console.log ãããã°ã debugger ãããã°ãªã©ã®ã½ã¼ã¹ã³ã¼ããç´æ¥æ¸ãæãããããã°ã¯ããã¾ãããã
ã§ããã£ã±ããæ¡ä»¶ä»ãã¬ã¼ã¯ãã¤ã³ããã使ãã¾ãã
æ¡ä»¶ä»ãã¬ã¼ã¯ãã¤ã³ãã¯ã Firebug 㨠Webkit ã§åºæ¥ã以ä¸ã®ãããªãã¤ã§ãã

JavaScript ã§ããè¦ãã¨ã©ã¼ãããããã¬ã¼ã¯ãã¤ã³ããã®æ¡ä»¶ãæ¨æ¸¬ãã¾ãã
çç·´ããã JSer ã¯ã¨ã©ã¼åãããã¬ã¼ã¯ãã¤ã³ãã®æ¡ä»¶ãå³åº§ã«çããããã
ãã¨ãã°ã
hoge.js ã® 121 è¡ç®ã§ãTypeError: Cannot read property 'firstChild' of nullãã¨ããã¨ã©ã¼ãåºãã
hoge.js ã® 121 è¡ç®ãè¦ã
ããã¦ã firstChild ã¨ããããããã£ãèªãã§ãã夿°ãæ¢ãã
ã§ã以ä¸ã®ããã«ãªã£ã¦ããã¨ããã121: return nodeA.firstChild || nodeB.firstChild;ã¨ãããã¨ããã®è¡ã§ä½¿ãã¹ããã¬ã¼ã¯ãã¤ã³ãã®æ¡ä»¶ã¯ãnodeA === null || nodeB === nullãã§ããã
ãããªæãã§ãã
ãæ¡ä»¶ä»ãããªããã¬ã¼ã¯ãã¤ã³ããã使ã£ã¦ãã¾ãã¨ãä¸å
·åãããªãã±ã¼ã¹ã§ãæ¢ã¾ã£ã¦ãã¾ã£ã¦ããããããã®ã§ãæ¡ä»¶ä»ãã¬ã¼ã¯ãã¤ã³ãã使ãã¾ãããã
ããã©ã¼ãã³ã¹ãã¥ã¼ãã³ã°ãã©ãããã
ããã©ã¼ãã³ã¹ãã¥ã¼ãã³ã°ã«é¢ãã¦ã¯ä»¥ä¸ã®ãã¨ãæ°ãã¤ãã¾ããã
- æåããç´°ãããã¥ã¼ãã³ã°ã«æ°ã使ããª
- 決å®çã«é ããªããã¨ã¯ãããªã
- 使éåº¦ã®æ¹åãå ã«ãã
- ããã©ã¼ãã³ã¹ãã¥ã¼ãã³ã°ã¯ãã³ãã¤ã³ãã§
- Google Closure Compiler ã使ã
æåããç´°ãããã¥ã¼ãã³ã°ã«æ°ã使ããª
æåããç´°ãããã¥ã¼ãã³ã°ã«æ°ã使ãå¿
è¦ã¯ããã¾ããã
ç´°ãããã¥ã¼ãã³ã°ã¯ããã¨ãããªãã¨ã§ããªãã¾ãã
決å®çã«é ããªããã¨ã¯ãããªã
ã¨ã¯è¨ã£ã¦ããããç¨åº¦ã®æ°é£ãã¯å¿
è¦ã§ãã
ãDOM ãå
¨é¨èµ°æ»ããªãã¨å®ç¾ã§ããªãæ©è½ããªã©ã®ããã«æããã«é
ããªããããå¾ãªããããªãã¨ã¯ãæåãããã£ã¦ã¯ããã¾ããã
使éåº¦ã®æ¹åãå ã«ãã
ã¦ã¼ã¶ã¼ãã£ã¼ãããã¯ãè¶³ãã¦ãªãå ´åããé度ã«ã¢ãã¡ã¼ã·ã§ã³ã使ãã¨ä½æçã«é
ãæãã¾ãã
å
ã«ããããæãã¤ãã¾ãããã
ããã©ã¼ãã³ã¹ãã¥ã¼ãã³ã°ã¯ãã³ãã¤ã³ãã§
å®è¡æéã®å¤§åã¯ãããä¸é¨ã®ç®æã§æµªè²»ããã¦ãããã¨ãå¤ãã§ãã
ãªã®ã§ãããã©ã¼ãã³ã¹ãã¥ã¼ãã³ã°ã¯ãã³ãã¤ã³ãã§å¹ççã«ããã¾ãããã
JavaScript ã®ã³ã¼ãã®ããã©ã¼ãã³ã¹ãã¥ã¼ãã³ã°ã«ã¯ã Firebug ã Webkit ã®ãããã¡ã¤ã©ã使ãã¾ãããã

ã¾ããã³ã¼ããåå ã¨ãéãã¾ããã
ãµã¼ãã¼ã®ã¬ã¹ãã³ã¹æéãæ¹åãããããµã¼ãã¼ã¸ XMLHttpRequest ãæããç²åº¦ã調æ´ããããããããããã¨ã¯ããã¾ãã
å
¨ä½ã俯ç°ããã«ã¯ WebKit ã®éçºè
ãã¼ã«ã® timeline ã便å©ã§ã

ã¾ã¨ã
ã¨ãããããã§ãµã¤ãã¦ãºã»ã©ãããµã¤ãã¦ãºã®çæ§ãæ¬å½ã«ãããããªãã¨ãåå¼·ããã¦ããã ãããããããªããã¾ã¾ãèãã¦ãã ããããããã¨ããããã¾ãã
ãã®ãããªä¼ç¤¾ã«å¤ãããããã¨ãåã¯èªãã«æã£ã¦ãã¾ãã
ã¾ããåã®æ¸ããã³ã¼ããå¼ãç¶ãã§ããã @yo_waka id:ama-ch ãããã¨ãã
ããã¦ããã®ããã°ãèªãã§ãããçæ§ããµã¤ãã¦ãºã§ JavaScript ãæ¸ãã¦ã¿ã¾ãããï¼
ã§ã¯ã§ã¯ãã¾ã id:amachang ã®æ¬¡åä½ã«ãæå¾
ãã ããã

ã¿ããªï¼ã¾ããï¼