Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓÆµ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
JavaScript SDK Éè¼ÆÖ¸ÄÏ
 
À´Ô´£ºÂëÅ©Íø ·¢²¼ÓÚ 2017-4-17
  3799  次浏览      27
 

½éÉÜ

±¾Ö¸ÄÏΪÄú½éÉÜÁËÔŲ́ʽ»úºÍÒÆ¶¯ÍøÂçÔÚ²»Í¬µÄƽ̨ºÍä¯ÀÀÆ÷£¨ < 99.99 £¥ÎÒ¿ÉÄÜ»áÌø¹ýһЩä¯ÀÀÆ÷£©¿ª·¢µÄJavaScript SDK £¬¶ÔÓÚÄÇЩ·Çä¯ÀÀÆ÷¿ª·¢µÄÖ§³Ö£¨Ó²¼þ£¬Ç¶Èëʽ£¬½Úµã/ IO JS £©±»ÅųýÔÚ±¾ÎĵµÖ®Í⣬ÔÚδÀ´ÓèÒÔ¿¼ÂÇ¡£

ÒòΪÎÒûÓÐÕÒµ½Ò»¸ö¹ØÓÚÉè¼ÆJavaScript SDKµÄ±È½ÏºÃµÄÎĵµ£¬ËùÒÔÎÒÔÚÕâÀïÊÕ¼¯²¢¼ÇÏÂÁËÎÒ¸öÈ˵ľ­Ñé¡£Õâ·ÝÎĵµÒѾ­Ð´Á˺ü¸¸öÔ£¬ÓÐÒ»µãÎÒÃÇÐèÒªÖªµÀ£¬JavaScriptµÄSDK-Éè¼Æ²»½ö½öÊÇÉè¼ÆSDK±¾Éí£¬ÕâÒ²ÊÇÓйØÓÚ¿ª·¢ÕßÓëÉ豸ä¯ÀÀÆ÷ÖмäµÄÁªÏµ¡£ÎÒÃÇдµÄÔ½¶à£¬Ô½»á¸ü¶àµÄ˼¿¼ÎÒÃÇÕæÕý¹ØÐĵÄÊDz»Í¬Æ½Ì¨ºÍä¯ÀÀÆ÷Ö®¼äµÄÐÔÄܺͼæÈÝÎÊÌâ¡£Äã¿ÉÒÔ¸ù¾ÝÇé¿ö×ÔÓɵĸü¸Ä»òÕßÍêÈ«·ÅÆúÎÒÔÚÎÄÕÂÀïÁгöµÄ½¨Òé¡£

ʲôÊÇSDK

ÎÒÖªµÀËüȷʵÊÇºÜÆÕͨºÜ³£¼û¡£Ò»°ãÊÇһЩÈí¼þ¹¤³ÌÊ¦ÎªÌØ¶¨µÄÈí¼þ°ü¡¢Èí¼þ¿ò¼Ü¡¢Ó²¼þƽ̨¡¢²Ù×÷ϵͳµÈ½¨Á¢Ó¦ÓÃÈí¼þʱµÄ¿ª·¢¹¤¾ßµÄ¼¯ºÏ¡£Í¨³£Ò»¸öSDK°üº¬Ò»¸ö»ò¶à¸öAPI£¬±à³Ì¹¤¾ßºÍµµ¡£

Éè¼ÆÀíÄî

ÕâÈ¡¾öÓÚÄãµÄSDKÓÃÀ´¸ÉʲôµÄ£¬µ«ÊÇËü±ØÐë¾ß±¸Ô­ÉúµÄ£¬¶Ì£¬Ëٶȿ죬¸É¾»£¬¿É¶Á¿É²âÊÔÌØÐÔ¡£ÓÃÔ­Éújavascriptд£¬²»ÒªÓÃÏñLivescript, Coffeescript, TypescriptºÍÆäËüµÄ±àÒëÓïÑÔ¡£±ØÐëÓиüºÃµÄ·½·¨À´±àд×Ô¼ºµÄjavascriptÔ­Éú´úÂë±È±ðÈ˸ü¿ì¡£Çë²»ÒªÔÚÄãµÄSDKÀïÓÃJQuery£¬³ý·ÇËü·Ç³£ÓбØÒª¡£Äã¿ÉÒÔʹÓÃÆäËüµÄÀàËÆjQueryµÄ¿â£¬Æ©Èçzetpo.js£¬ÓÃÓÚDOM²Ù×÷£¬Èç¹ûÄãÐèÒªÓõ½HTTP AjaxÇëÇ󣬿ÉÒÔʹÓÃÁíÍâÒ»ÖÖÇáÁ¿¿âÏñwindow.fetch¡£

ÿһ´ÎµÄSDK°æ±¾·¢²¼£¬È·±£Ëü²»½öÊÊÓÃÓھɰ汾¶øÇÒÊÊÓ¦ÓÚδÀ´µÄа汾¡£ËùÒÔ£¬¼ÇµÃΪÄãµÄSDKдÎĵµ£¬´úÂëҪдעÊÍ£¬Í¬Ê±×öºÃµ¥Ôª²âÊÔºÍÓû§³¡¾°²âÊÔ¡£

ÊÊÓ¦·¶Î§

»ùÓÚ¡¶Third-Party JavaScript¡·Õâ±¾Êé¡£ÔÚºÎÖÖÇé¿öÏ£¬ÄãÓ¦¸ÃΪÄãµÄÓ¦ÓÃÉè¼ÆÒ»¸öJavaScript SDK£¿

ǶÈëʽ×é¼þ ¨C ǶÈëÔÚ³ö·¢²¼ÕßµÄÍøÒ³ÖеĽ»»¥Ê½Ó¦ÓóÌÐò(Disqus, Google Maps, Facebook Widget)¡£

·ÖÎöÓëÊý¾Ý ¨C ËѼ¯ÍøÕ¾·ÃÎÊÕßÒÔ¼°ÆäÓëÍøÕ¾»¥¶¯µÄÊý¾ÝÐÅÏ¢¡£(GA, Flurry, Mixpanel)

web·þÎñAPI·â×° -¶ÔÓÚ·¢Õ¹ÓëÍⲿWeb·þÎñͨÐŵĿͻ§¶ËÓ¦ÓóÌÐò¡££¨FacebookµÄͼÐÎAPI£©

ÔÚʲôÇé¿öÏ£¬ÎÒÃÇÓ¦¸ÃÔÚJavaScript»·¾³ÖÐʹÓÃSDKÄØ£¿´ó¼Ò¿ÉÒÔÏëÏ뻹ÓÐÆäËüÇéû£¿

ÒýÈëSDK

½¨ÒéÄã²ÉÓÃÒì²½¼ÓÔØ½Å±¾µÄ·½Ê½¡£ÎÒÃÇÒªÓÅ»¯ÍøÕ¾µÄÓû§ÌåÑ飬ËùÒÔ²»Ï£ÍûÎÒÃǵÄSDK¿â×èÈûÆäËüÖ÷Òª½ø³Ì¡£

Òì²½¼ÓÔØ

(function() {vars=document.createElement('script');s.type='text/javascript';s.async=tr
ue;s.src='http://xxx.com/sdk.js';varx=document.getElementsByTagName('script')[0];x.pa
rentNode.insertBefore(s, x);})();**

ÔÚеÄÏÖ´úä¯ÀÀÆ÷£¨chrome£©Äã¿ÉÒÔʹÓÃ

<script asyncsrc="http://xxx.com/sdk.js"></script>

´«Í³¼ÓÔØ·½·¨

<script type="text/javascript"src="http://xxx.com/sdk.js"></script>

¶Ô±È£º

ÏÂÃæÊǼòµ¥µÄͼÐÎÏÔʾÒì²½¼ÓÔØºÍ´«Í³Í¬²½¼ÓÔØ·½Ê½Ö®¼äµÄÇø±ð

Òì²½£º

|----A-----|
|-----B-----------|
|-------C------|

ͬ²½£º

|----A-----||-----B-----------||-------C------|

Òì²½ºÍÑӳٽű¾Ö´ÐнâÊÍ

Òì²½µÄÎÊÌâ

µ±ÄãʹÓÃÒì²½¼ÓÔØµÄʱºò£¬½«»á³öÏÖ£¬Ò³ÃæÖеĺ¯ÊýÎÞ·¨Õý³£µ÷ÓÃSDK·½·¨µÄÇé¿ö¡£

<script>
(function () {
var s =document.createElement('script');
s.type='text/javascript';
s.async=true;
s.src='http://xxx.com/sdk.js';
var x =document.getElementsByTagName('script')[0];
x.parentNode.insertBefore(s, x);
})();
// execute your script immediately hereSDKName('some arguments');
</script>

½á¹û»á±¨undefined´íÎó£¬ÒòΪSDKName()Ôڽű¾¼ÓÔØÖ®Ç°Ö´ÐÐÁË¡£ËùÒÔÎÒÃÇÓ¦¸ÃʹÓõ㼼ÇÉÈýű¾ÕýÈ·Ö´ÐС£°Ñʼþ±£´æÔÚSDKName.qÊý×éÀSDK³õʼ»¯µÄʱºòÖ´ÐÐSDKName.q¡£

<script>
(function () {
// add a queue event here
SDKName = SDKName ||function () {
(SDKName.q=SDKName.q|| []).push(arguments);
};
var s =document.createElement('script');
s.type='text/javascript';
s.async=true;
s.src='http://xxx.com/sdk.js';
var x =document.getElementsByTagName('script')[0];
x.parentNode.insertBefore(s, x);
})();
// execute your script immediately hereSDKName('some arguments');
</script>

»òÕßÓÃ [ ].push

<script>
(function () {
// add a queue event here
SDKName =window.SDKName|| (window.SDKName= []);
var s =document.createElement('script');
s.type='text/javascript';
s.async=true;
s.src='http://xxx.com/sdk.js';
var x =document.getElementsByTagName('script')[0];
x.parentNode.insertBefore(s, x);
})();
// execute your script immediately hereSDKName.push(['some arguments']);
</script>

ÆäËû·½Ê½

»¹ÓÐÆäËü²»Í¬·½Ê½¼ÓÔØ½Å±¾

Import in ES2015

import"your-sdk";

Ä£¿é¼ÓÔØ

ÕâÀïÓÐÍêÕûµÄÔ´ÂëºÍ·Ç³£°ôµÄ½Ì³Ì. Loading JavaScript Modules

module('sdk.js',['sdk-track.js', 'sdk-beacon.js'],function(track, beacon) {
// sdk definitions, split into local and global/exported definitions// local definitions// exports
});
// you should contain this "module" method
(function () {
var modules = {}; // private record of module data// modules are functions with additional informationfunctionmodule(name,imports,mod) {
// record module informationwindow.console.log('found module '+name);
modules[name] = {name:name, imports: imports, mod: mod};
// trigger loading of import dependenciesfor (var imp in imports) loadModule(imports[imp]);
// check whether this was the last module to be loaded// in a given dependency grouploadedModule(name);
}

// function loadModule// function loadedModulewindow.module=module;
})();

SDK°æ±¾

±ÜÃâʹÓÃ×Ô¼ºµÄÌØÀý×÷Ϊ°æ±¾Ãû³ÆÏñ

±êʶ-v<ʱ¼ä´Á>.js ±êʶ-v<ÈÕÆÚ>.js ±êʶ-v1-v2.js

Ëü¿ÉÄܵ¼ÖÂʹÓÃSDKµÄ¿ª·¢ÕߺܻìÂÒ²»ÖªµÀÄĸöÊÇ×îа汾¡£

ʹÓà Semantic Versioning £¨ÓïÒ廯°æ±¾¹æ·¶£©È¥¶¨ÒåSDKµÄ°æ±¾ºÅÒÔ¡±´ó.С.²¹¶¡¡±ÐÎʽ¡£

°æ±¾ÒÔv1.0.0 v1.5.0 v2.0.0µÄÐÎʽ£¬»áÈÃʹÓÃÕßËÑË÷¸ú×ÙÈÕÖ¾Îļþ¸üÈÝÒס£

ͨ³£Çé¿öÏ£¬ÎÒÃÇ»áÓв»Í¬µÄ·½Ê½È¥ÉùÃ÷SDKµÄ°æ±¾£¬ÕâÈ¡¾öÓÚ¾ßÌåÕë¶ÔµÄÒµÎñºÍÉè¼Æ¡£

ʹÓòéѯ×Ö·û´®Â·¾¶

http://xxx.com/sdk.js?v=1.0.0

ʹÓÃÎļþ¼ÐÃüÃû

http://xxx.com/v1.0.0/sdk.js

ʹÓÃÖ÷»úÃû»òÕß×ÓÓòÃû

http://v1.xxx.com/sdk.js

ΪÁËÒÔºó°æ±¾µÄÉý¼¶µü´ú£¬½¨ÒéÓÃstable unstable alpha latest experimental °æ±¾¡£

http://xxx.com/sdk-stable.js

http://xxx.com/sdk-unstable.js


http://xxx.com/sdk-alpha.js


http://xxx.com/sdk-latest.js


http://xxx.com/sdk-experimental.js

¸üÐÂÈÕÖ¾Îļþ

ÄãÓ¦¸Ã×¢Òâµ½Èç¹ûÄãÉý¼¶ÄãµÄSDKȴû֪ͨÓû§£¬Óû§²»»áÖªµÀ¡£¼ÇµÃд¸üÐÂÈÕÖ¾À´¼Ç¼ÎÞÂÛÊÇÖ÷Òª¡¢´ÎÒªÉõÖÁbugÐÞ¸´µÈÐ޸ġ£Õ⽫ÊÇÒ»¸öºÃµÄ¿ª·¢¾­Ñ飬ÎÒÃÇÄÜ¿ìËٵĸú×Ùµ½SDKij¸öAPIµÄÐ޸ġ£ËùÒÔ±£³Ö¸üÐÂÈÕÖ¾ ¨C Keep a Changelog, Github Repo

ÿ¸ö°æ±¾µÄÈÕÖ¾Ó¦¸ÃÓУº

[ÐÂÔö] й¦ÄÜ.
[¸üÐÂ] ÐÞ¸ÄÏÖÓеĸüÄÜ
[·ÏÆú] ÔÚ¼´½«·¢²¼µÄ°æ±¾ÖÐɾ³ýij¸ö¹¦ÄÜ.
[ɾ³ý] ÔÚÕâ¸ö°æ±¾ÖÐɾ³ýÆúÓõŦÄÜ.
[ÐÞÕý] bugÐÞ¸´
[°²È«] ÑûÇëÓû§¶Ô°²È«½øÐÐÉý¼¶

ÃüÃû¿Õ¼ä

ÔÚÄãµÄSDKÀïÖ»¶¨ÒåÒ»¸öÈ«¾ÖÃüÃû¿Õ¼ä£¬²¢ÇÒ²»ÒªÓÃÌ«¹ýͨÓõÄÃû×Ö£¬±ÜÃâºÍÆäËüÀà¿âÃû·¢Éú³åÍ»¡£SDKµÄÖ÷ÌåÓÃ(function () { ¡­ })()°ü¹ü¡£ÕâÖÖ×ö·¨Ô½À´Ô½ÆÕ±éµÄÓ¦ÓÃÓÚ¸÷ÖÖÁ÷ÐеÄjavascriptÀà¿âÆ©ÈçjQuery,Node.jsµÈµÈ¡£ÕâÖÖ´´½¨Ë½ÓеÄÃüÃû¿Õ¼äµÄ¼¼ÊõºÜÖØÒª£¬ÓÐÖúÓÚ±ÜÃâ¸÷ÖÖÀà¿âÖ®¼äÃüÃûµÄ³åÍ»¡£

ΪÁ˱ÜÃâÃüÃû¿Õ¼ä³åÍ»

ѧϰGoogle AnalyticsµÄ×ö·¨£¬Äã¿ÉÒÔͨ¹ý¸Ä±ä gaµÄÖµÀ´¶¨ÒåÄã×Ô¼ºµÄÃüÃû¿Õ¼ä¡£

(function(i,s,o,g,r,a,m) {i['GoogleAnalyticsObject']=r;i[r]=i[r]||function(){
(i[r].q=i[r].q||[]).push(arguments)},i[r].l=1*new Date();a=s.createElement(o),
m=s.getElementsByTagName(o) [0];a.async=1;a.src=g;m.parentNode.insertBefore(a,m)
})(window,document,'script','//www.google- analytics.com/analytics.js','ga');

ÏÂÃæµÄÊÇ openXµÄ×ö·¨£¬Ö§³Öͨ¹ý¸øµØÖ·´«µÝ²ÎÊý¶¨ÒåÃüÃû¿Õ¼ä¡£

<script src="http://your_domain/sdk?namespace=yourcompany"></script>

´æ´¢»úÖÆ

cookie

ʹÓÃcookie¾Í»áÃæÁÙ¸´ÔÓµÄ×÷ÓÃÓò·¶Î§ÎÊÌ⣬¶øÇÒÉæ¼°µ½×ÓÓòºÍ·¾¶ÎÊÌâ¡£

±ÈÈçÔÚ·¾¶ path=/ÏÂ, cookie first=value1 ÔÚÓòÃû http://github.comÏÂ, ÁíÍâÒ»¸ö cookie second=value2 ÔÚÓòÃû http://sub.github.comÏÂ

Óиö cookie first=value1 ÔÚ http://github.comÏÂ, cookie second=value2 ÔÚ http://github.com/path1 ÁíÍâÒ»¸ö cookie third=value3 ÔÚ http://sub.github.comÏÂ,

¼ì²é Cookie ¿É¶Áд

¸ø¶¨Ò»¸öÓò (ĬÈϵ±Ç°Ö÷»úÓòÃû), ¼ì²écookieÊÇ·ñ¿É¶Áд¡£

var checkCookieWritable = function(domain) {
try {
// Create cookie
document.cookie = 'cookietest=1' + (domain ? '; domain=' + domain : '');
var ret = document.cookie.indexOf('cookietest=') != -1;
// Delete cookie
document.cookie = 'cookietest=1; expires=Thu, 01-Jan-1970 00:00:01 GMT' + (domain ? '; domain=' + domain : '');
return ret;
} catch (e) {
return false;
}
};

¼ì²éµÚÈý·½ Cookie ¿É¶Áд

¼ì²éµÚÈý·½cookie½ö½öͨ¹ý¿Í»§¶ËjsÊǰ첻µ½µÄ£¬ÐèÒª·þÎñÆ÷¶ËÅäºÏ¡£

д ¶Á ɾ³ý Cookie ´úÂë

´úÂëÆ¬¶Îд/¶Á/ɾ³ýcookieµÄ½Å±¾¡£

var cookie = {
write: function(name, value, days, domain, path) {
var date = new Date();
days = days || 730; // two years
path = path || '/';
date.setTime(date.getTime() + (days * 24 * 60 * 60 * 1000));
var expires = '; expires=' + date.toGMTString();
var cookieValue = name + '=' + value + expires + '; path=' + path;
if (domain) {
cookieValue += '; domain=' + domain;
}
document.cookie = cookieValue;
},
read: function(name) {
var allCookie = '' + document.cookie;
var index = allCookie.indexOf(name);
if (name === undefined || name === '' || index === -1) return '';
var ind1 = allCookie.indexOf(';', index);
if (ind1 == -1) ind1 = allCookie.length;
return unescape(allCookie.substring(index + name.length + 1, ind1));
},
remove: function(name) {
if (this.read(name)) {
this.write(name, '', -1, '/');
}
}
};

Session

jsд²»ÁËsession,ÐèÒª·þÎñÆ÷¶Ëд¡£

Ò»¸öÒ³ÃæµÄsession»áÒ»Ö±±£´æ×ÅÖ»Òªä¯ÀÀÆ÷ÊÇ¿ª×ŵļ´Ê¹Ò³ÃæÖØÐ¼ÓÔØ¡£´ò¿ªÒ»¸öÐÂÒ³Ãæ»áÉú³ÉÒ»¸öеÄsession¡£×Ó´°¿Ú»áºÍ¸¸´°¿Ú¹²ÏíÒ»¸ösession¡£

LocalStorage

´æ´¢µÄÊý¾ÝûÓÐʱ¼äÏÞÖÆ¡£´æ´¢Êý¾ÝÁ¿´ó£¨ÖÁÉÙ5MB£©²¢ÇÒÐÅÏ¢²»»á´«Ë͵½·þÎñÆ÷¡£¶øÇÒͬһ¸öÓòÃû´ÓhttpºÍhttps·ÃÎÊlocalStorageÊDz»¹²ÏíµÄ¡£Äã¿ÉÒÔÔÚÄãµÄÍøÒ³ÉÏ´´½¨¸öiframe£¬È»ºóÓÃpostMessage·½·¨È¥´«Öµµ½¸¸Ò³Ãæ¡£HOW TO?

¼ì²é LocalStorage ¿Éд

window.localStorage ²¢²»ÊÇÈκÎä¯ÀÀÆ÷¶¼Ö§³Ö£¬SDKÔÚÓÃ֮ǰҪ¼ì²éÊÇ·ñ¿ÉÓá£

var testCanLocalStorage = function() {
var mod = 'modernizr';
try {
localStorage.setItem(mod, mod);
localStorage.removeItem(mod);
return true;
} catch (e) {
return false;
}
};

SessionStorage

Õë¶ÔÒ»¸ö session µÄÊý¾Ý´æ´¢(µ±Óû§¹Ø±Õä¯ÀÀÆ÷´°¿Úºó£¬Êý¾Ý»á±»É¾³ý).

¼ì²é SessionStorage ¿Éд

var checkCanSessionStorage = function() {
var mod = 'modernizr';
try {
sessionStorage.setItem(mod, mod);
sessionStorage.removeItem(mod);
return true;
} catch (e) {
return false;
}
}

ʼþ

ÔÚ¿Í»§¶Ëä¯ÀÀÆ÷Óкܶàʼþ¼ÓÔØ¡¢Ð¶ÔØ¡¢°ó¶¨µÈ»á´æÔÚ¼æÈÝÎÊÌâ¡£polyfillsÊǸö½â¾ö²»Í¬Æ½Ì¨Ê¼þ°ó¶¨µÄ²»´íµÄ½â¾ö·½°¸¡£

Document Ready

È·±£Õû¸öÒ³ÃæÍê³É¼ÓÔØÁËÔÙÖ´ÐÐSDK·½·¨¡£

// handle IE8+
function ready (fn) {
if (document.readyState != 'loading') {
fn();
} else if (window.addEventListener) {
// window.addEventListener('load', fn);
window.addEventListener('DOMContentLoaded', fn);
} else {
window.attachEvent('onreadystatechange', function() {
if (document.readyState != 'loading')
fn();
});
}
}

DOMContentLoaded - ËùÓÐDOM½âÎöÍê»á´¥·¢Õû¸öʼþ ²»ÐèÒªµÈµ½Ñùʽ±í¡¢Í¼Æ¬µÈ¼ÓÔØÍê¡£

load Ò³ÃæÍêÕû¼ÓÔØ¡£

Message Event

ÕâÀïÊÇʵÏÖiframeºÍ¸¸Ò³ÃæÖ®¼äµÄÊý¾ÝͨÐÅ, ÕâÀïÓÐÎĵµ API documentation.

// in the iframe
parent.postMessage("Hello"); // string

// ==========================================
// in the iframe's parent
// Create IE + others compatible event handler
var eventMethod = window.addEventListener ? "addEventListener" : "attachEvent";
var eventer = window[eventMethod];
var messageEvent = eventMethod == "attachEvent" ? "onmessage" : "message";
// Listen to message from child window
eventer(messageEvent,function(e) {
// e.origin , check the message origin
console.log('parent received message!: ',e.data);
},false);

·¢Ë͵ÄÊý¾ÝÊÇ×Ö·û´®, ¶ÔÓÚʹÓøü¸ß¼¶µÄjson×Ö·û´®. ²»ÊÇËùÓеÄä¯ÀÀÆ÷¶ÔÖ§³Ö Structured Clone Algorithm on the parameter, £¨²ÎÊýµÄ½á¹¹»¯¿Ë¡£©¡£

Orientation Change ºáÆÁʼþ

¼ì²âÉ豸ºáÆÁ

window.addEventListener('orientationchange', fn);

»ñÈ¡Ðýת·½ÏòºÍ½Ç¶È

window.orientation; // => 90, -90, 0

Screen portrait-primary£¨ÊúÆÁÕý·½Ïò£©, portrait-secondary£¨ÊúÆÁ·´·½Ïò£©, landscape-primary£¨ºáÆÁÕý·½Ïò£©, landscape-secondary £¨ºáÆÁ·´·½Ïò£©(Experimental)

// https://developer.mozilla.org/en-US/docs/Web/API/Screen/orientation
var orientation = screen.orientation || screen.mozOrientation || screen.msOrientation;

Request

ÎÒÃǵÄSDKºÍ·þÎñÆ÷Ö®¼äͨÐÅͨ¹ýAjaxÇëÇó£¬ÒòΪÎÒÃÇÖªµÀÎÒÃÇ¿ÉÒÔʹÓÃjQueryµÄAjax ·½·¨¡£µ«ÊÇÓиüºÃµÄ·½°¸À´ÊµÏÖËü¡£

ͼƬԤ¼ÓÔØ

ͨ¹ý´´½¨Ò»¸öImage¶ÔÏóÔ¤¼ÓÔØÒ»ÕÅͼƬ¡£ÎªÁË·ÀÖ¹ä¯ÀÀÆ÷»º´æ¼ÇµÃ¼ÓÉÏʱ¼ä´Á¡£

(new Image()).src = 'http://xxxxx.com/collect?id=1111';

ҪעÒâͨ¹ýGET·½Ê½´«Êä²ÎÊý×î´ó³¤¶ÈÊÇ2048¸ö×Ö½Ú£¨È¡¾öÓÚ²»Í¬µÄä¯ÀÀÆ÷ºÍ·þÎñÆ÷£©¡£ÕâÀïÒª×öһЩ´¦ÀíÈç¹û³¬¹ý³¤¶È¡£

if (length > 2048) {
// do Multiple Post (form)
} else {
// do Image Beacon
}

Äã¿ÉÄÜÓöµ½ÎÊÌâÔÚʹÓÃencodeURI »¹ÊÇ encodeURIComponentµÄʱºò,×îºÃÀí½âËüÃǵÄÇø±ð¡£ See below.

¶ÔÓÚͼÏñ¼ÓÔØ³É¹¦/´íÎ󻨵÷

var img = new Image();
img.src = 'http://xxxxx.com/collect?id=1111';
img.onload = successCallback;
img.onerror = errorCallback;

µ¥¸ö Post ÇëÇó

ÆÕͨ±íµ¥·¢ËÍÒ»¸ö¶ÔÓ¦ÔªËØºÍÖµ

var form = document.createElement('form');
var input = document.createElement('input');

form.style.display = 'none';
form.setAttribute('method', 'POST');
form.setAttribute('action', 'http://xxxx.com/track');

input.name = 'username';
input.value = 'attacker';

form.appendChild(input);
document.getElementsByTagName('body')[0].appendChild(form);

form.submit();

¶à¸ö Post ÇëÇó

·þÎñͨ³£±È½Ï¸´ÔÓ£¬ÐèҪͨ¹ýPOST·½·¨·¢Ë͸ü¶àÊý¾Ý¡£

function requestWithoutAjax( url, params, method ){

params = params || {};
method = method || "post";

// function to remove the iframe
var removeIframe = function( iframe ){
iframe.parentElement.removeChild(iframe);
};

// make a iframe...
var iframe = document.createElement('iframe');
iframe.style.display = 'none';

iframe.onload = function(){
var iframeDoc = this.contentWindow.document;

// Make a invisible form
var form = iframeDoc.createElement('form');
form.method = method;
form.action = url;
iframeDoc.body.appendChild(form);

// pass the parameters
for( var name in params ){
var input = iframeDoc.createElement('input');
input.type = 'hidden';
input.name = name;
input.value = params[name];
form.appendChild(input);
}

form.submit();
// remove the iframe
setTimeout( function(){
removeIframe(iframe);
}, 500);
};

document.body.appendChild(iframe);
}
requestWithoutAjax('url/to', { id: 2, price: 2.5, lastname: 'Gamez'});

Iframe

µ±ÄãÔÚÐèÒªÔÚÒ³ÃæÖÐÉú³ÉÄÚÈÝʱºò£¬Äã¿ÉÒÔͨ¹ýiframeǶÈë¡£

var iframe = document.createElement('iframe');
var body = document.getElementsByTagName('body')[0];

iframe.style.display = 'none';
iframe.src = 'http://xxxx.com/page';
iframe.onreadystatechange = function () {
if (iframe.readyState !== 'complete') {
return;
}
};
iframe.onload = loadCallback;

body.appendChild(iframe);

Çå³ýiframeµÄ±ß¿ò£¬ÄÚ²¿marginÖµ¡£

<iframe src="..."
marginwidth="0"
marginheight="0"
hspace="0"
vspace="0"
frameborder="0"
scrolling="no">
</iframe>

iframeÖвåÈëhtml

<iframe id="iframe"></iframe>

<script>
var html_string= "content <script>alert(location.href); </script>";
document.getElementById('iframe').src = "data:text/html;charset=utf-8," + escape(html_string);
// alert data:text/html;charset=utf-8.....
// access cookie get ERROR

var doc = document.getElementById('iframe').contentWindow.document;
doc.open();
doc.write('<body>Test<script>alert(location.href);</script></body>');
doc.close();
// alert "top window url"

var iframe = document.createElement('iframe');
iframe.src = 'javascript:;\\\\'' + encodeURI('<html><body> <script>alert(location.href);</body></html>') + '\\\\'';
// iframe.src = 'javascript:;"' + encodeURI((html_tag).replace(/\\\\"/g, '\\\\\\\\\\\\"')) + '"';
document.body.appendChild(iframe);
// alert "about:blank"
</script>

jsonp

ÕâÖÖÇé¿öÏ£¬ÄãµÄ·þÎñÆ÷ÐèÒªÏìÓ¦JavaScript ´úÂ룬²¢ÈÃä¯ÀÀÆ÷Ö´ÐÐËü£¬½ö½öͨ¹ýjs½Å±¾Á´½Ó¡£

(function () {
var s = document.createElement('script');
s.type = 'text/javascript';
s.async = true;
s.src = '/yourscript? some=parameter&callback=jsonpCallback';
var x = document.getElementsByTagName('script')[0];
x.parentNode.insertBefore(s, x);
})();

¹ØÓÚjsonpÄãÐèÒªÁ˽⣺

JSONP Ö»ÄÜͨ¹ýGETÇëÇó¡£

JSONP ȱÉÙ´íÎó´¦Àí»úÖÆ, Òâζ×ÅÄã²»Äܼì²â´úÂëÊÇ·ñ404»¹ÊÇ500µÈ״̬¡£

JSONP ÇëÇóÊÇÒì²½µÄ¡£

µ±ÐÄ CSRF ¹¥»÷¡£

¿çÓòͨÐÅ¡£½Å±¾ÏìÓ¦¶Ë£¨·þÎñÆ÷¶Ë£©²»ÐèÒª¹ØÐÄCORS¡£

XMLHttpRequest

×Ô¼ºÐ´XMLHttpRequest²»ÊǸöºÃÖ÷Ò⣬ÒòΪÄãÒªÀ˷Ѻܶàʱ¼äÈ¥×öIE»òÕ߯äËüä¯ÀÀÆ÷µÄ¼æÈÝ¡£ÕâÀïÌṩһЩÏֳɵĽâ¾ö·½°¸¹©´ó¼Ò²Î¿¼£º

1 - window.fetch - A window.fetch JavaScript polyfill.

2 - got - Simplified HTTP/HTTPS requests

3 - microjs - list of ajax lib

4 ¨C more

Maximum Number of Connection

¼ì²é²»Í¬ä¯ÀÀÆ÷µÄ×î´óÁ¬½ÓÊý browserscope

µ÷ÊÔ

Ä£Äâ¶à¸öÓò

Äã²»ÐèҪע²á¶à¸öÓòÃûÀ´Ä£ÄâÓò£¬ÔÚ±¾µØ´î½¨¸öÐéÄâ·þÎñÆ÷£¬°ó¶¨hostµÄ·½Ê½¾Í¿ÉÒÔ£º

$ sudo vim /etc/hosts

Ìí¼ÓÒÔÏÂÌõÄ¿

#refer to localhost 
127.0.0.1 publisher.net
127.0.0.1 sdk.net

È»ºóÄã¾Í¿ÉÒÔ·ÃÎʸÃÒ³Ãæhttp://publisher.netºÍhttp://sdk.net

Developer Tools

ÓÃä¯ÀÀÆ÷×Ô´øµÄµ÷ÊÔ¹¤¾ß£¬Chrome Developer Tool ¡¢Safari Developer Tools¡¢Firebug¶¼ÊDz»´íµÄÑ¡Ôñ¡£

¿ª·¢¹¤¾ßÒ²¼ò³ÆÎª¹¤¾ß¡£

¹¤¾ßÌṩWeb¿ª·¢ÕßÉî½øÈëä¯ÀÀÆ÷ºÍWebÓ¦ÓóÌÐòµÄÄÚ²¿¡£Ê¹Óù¤¾ßÀ´ÓÐЧµØ×·×Ù²¼¾ÖÎÊÌ⣬½«JavaScript´ò¶Ïµã£¬²¢»ñµÃ´úÂëÓÅ»¯µÄ½¨Òé¡£

¿ØÖÆÌ¨ÈÕÖ¾

ÓÃÓÚ²âÊÔºÍÊä³öÎı¾ºÍÆäËûÒ»°ãµÄµ÷ÊÔ£¬ ¿ØÖÆÌ¨ÈÕÖ¾¿Éͨ¹ýä¯ÀÀÆ÷µÄAPI log()Êä³öÏÔʾ¡£Óи÷ÖÖ¸÷ÑùµÄ·½·¨ºÍ¸ñʽÊä³öÄãµÄÐÅÏ¢£¬Á˽â¸ü¶àAPI£º Console API.

µ÷ÊÔ´úÀí

´úÀíÔÚÄãµ÷ÊÔSDKµÄºÜ¶àʱºò¶¼ºÜÓÐÓᣠÐÞ¸Äcookies, headers, cache, ±à¼­ http request/response, SSL Proxying, ajax µ÷ÊԵȵȡ£

ÕâÀïÍÆ¼öһЩ´úÀí¹¤¾ß£º

FiddlerCore

Charles

Cellist

BrowserSync

BrowsersyncÄÜÈÃä¯ÀÀÆ÷ʵʱ¡¢¿ìËÙÏìÓ¦ÄúµÄÎļþ¸ü¸Ä£¨html¡¢js¡¢css¡¢sass¡¢lessµÈ£©²¢×Ô¶¯Ë¢ÐÂÒ³Ãæ¡£¸üÖØÒªµÄÊÇ Browsersync¿ÉÒÔͬʱÔÚPC¡¢Æ½°å¡¢ÊÖ»úµÈÉ豸ϽøÏîµ÷ÊÔ¡£ËüÕæµÄºÜÓаïÖúÈç¹ûÄãÐèÒª¿çƽ̨²âÊÔÄãµÄSDK£©¡£

ÌáʾºÍС¼¼ÇÉ

Console Logs Polyfill£¨Polyfilling ÊÇÓÉ RemySharp Ìá³öµÄÒ»¸öÊõÓËüÊÇÓÃÀ´ÃèÊö¸´ÖÆÈ±ÉÙµÄ API ºÍAPI ¹¦ÄܵÄÐÐΪ£©

Õâ²»ÊÇÒ»¸öÕæÕýµÄpolyfill£¬Ö»ÊDZ£Ö¤ÔÚµ÷ÓÃconsole.log APIµÄʱºò²»Å׳ö´íÎó¡£

if (typeof console === "undefined") { var f = function() {}; console = { log: f, debug: f, error: f, info: f };}

EncodeURI or EncodeURIComponent

Àí½âÈýÕߵIJ»Í¬ escape()¡¢encodeURI()¡¢encodeURIComponent()

here.

¼ÇסʹÓà encodeURI()ºÍencodeURIComponent()ÓÐ11¸ö×Ö·û²»Í¬¡£ ËüÃÇÊÇ: # $ & + , / : ; = ? @ more discussion¡£

Äã¿ÉÄÜÕæµÄ²»ÐèÒªJQuery

ÕýÈç±êÌâËù˵, Äã¿ÉÄÜÕæµÄ²»ÐèÒªJQuery¡£Èç¹ûÄãÕýÔÚÕÒһЩ¹«¹²µÄ´úÂëÄÇÏÂÃæÕâЩ»áºÜÓÐÓãº- AJAX EFFECTS, ELEMENTS, EVENTS, UTILS

Äã²»ÐèÒª jQuery

Free yourself from the chains of jQuery by embracing and understanding the modern Web API and disc
overing various directed libraries to help you fill in the gaps.

http://blog.garstasio.com/you-dont-need-jquery/

ÓÐÓÃµÄ Tips

Selecting Elements

DOM Manipulation

»Øµ÷º¯Êý¼ÓÔØ½Å±¾

ÀàËÆÓÚ Òì²½¼ÓÔØ½Å±¾ Ôö¼Ó»Øµ÷º¯Êý¡£

function loadScript(url, callback) { 
var script = document.createElement('script');
script.async = true; script.src = url;
var entry = document.getElementsByTagName('script')[0]; entry.parentNode.insertBefore(script, entry);
script.onload = script.onreadystatechange = function () { var rdyState = script.readyState;
if (!rdyState || /complete|loaded/.test(script.readyState)) {

callback(); // detach the event handler to avoid memory leaks in IE (http://mng.bz/W8fx)
script.onload = null;
script.onreadystatechange = null; } };
}

Ö´ÐÐÒ»´Îº¯Êý

ÕâÀïչʾÁËÈçºÎʵÏÖº¯ÊýÖ»Ö´ÐÐÒ»´Î¡£

ÿµ±ÄãÏëÓÐÒ»¸öÖ»ÔËÐÐÒ»´ÎµÄº¯Êý¡£Í¨³£ÕâЩº¯ÊýÊÇÒÔʼþ¼àÌýµÄ·½Ê½£¬ºÜÄѹÜÀí¡£µ±È»Èç¹ûºÜÈÝÒ×¹ÜÀí£¬ÄãÖ»ÐèҪɾ³ý¼àÌýʼþ£¬µ«ÊÇÕâÊǸöÀíÏëµÄ״̬£¬ºÜ¶àʱºòÄãÖ»ÐèÒªÔÊÐíÒ»¸öº¯ÊýÖ´ÐÐÒ»´Î¡£ÏÂÃæµÄ´úÂë¿ÉÒÔʵÏÖ£º

// Copy from DWB
// http://davidwalsh.name/javascript-once
function once(fn, context) {
var result; return function() {
if(fn) {
result = fn.apply(context || this, arguments);
fn = null;
}
return result; };
}
// Usagevar
canOnlyFireOnce = once(function() { console.log('Fired!');});
canOnlyFireOnce(); // "Fired!"canOnlyFireOnce(); // nada

»ñÈ¡Ñùʽ

»ñÈ¡ÐмäÑùʽ

<span id="black" style="color: black"> 
This is black color span
</span>
<script> document.getElementById('black').style.color; // => black</script>

»ñÈ¡ÕæÕýµÄÑùʽ

<style>
#black { color: red !important;}
</style>
<span id="black" style="color: black">
This is black color span
</span>
<script>
document.getElementById('black').style.color; // => black
// real var black = document.getElementById('black');
window.getComputedStyle(black, null).getPropertyValue('color'); // => rgb(255, 0, 0)
</script>

¼ì²âµ±Ç°´°¿Ú

function isElementInViewport (el) { 
//special bonus for those using jQuery
if (typeof jQuery === "function" && el instanceof jQuery) {
el = el[0];
}
var rect = el.getBoundingClientRect();
return (
rect.top >= 0 &&
rect.left >= 0 &&
rect.bottom <= (window.innerHeight || document.documentElement.clientHeight) && /*or $(window).height() */
rect.right <= (window.innerWidth || document.documentElement.clientWidth) /*or $(window).width() */
);
}

   
3799 ´Îä¯ÀÀ       27
Ïà¹ØÎÄÕ Ïà¹ØÎĵµ Ïà¹Ø¿Î³Ì



Éî¶È½âÎö£ºÇåÀíÀôúÂë
ÈçºÎ±àд³öÓµ±§±ä»¯µÄ´úÂë
ÖØ¹¹-ʹ´úÂë¸ü¼ò½àÓÅÃÀ
ÍŶÓÏîÄ¿¿ª·¢"±àÂë¹æ·¶"ϵÁÐÎÄÕÂ
ÖØ¹¹-¸ÄÉÆ¼ÈÓдúÂëµÄÉè¼Æ
Èí¼þÖØ¹¹v2
´úÂëÕû½àÖ®µÀ
¸ßÖÊÁ¿±à³Ì¹æ·¶
»ùÓÚHTML5¿Í»§¶Ë¡¢Web¶ËµÄÓ¦Óÿª·¢
HTML 5+CSS ¿ª·¢
ǶÈëʽC¸ßÖÊÁ¿±à³Ì
C++¸ß¼¶±à³Ì
×îл¼Æ»®
DeepSeekÔÚÈí¼þ²âÊÔÓ¦ÓÃʵ¼ù 4-12[ÔÚÏß]
DeepSeek´óÄ£ÐÍÓ¦Óÿª·¢Êµ¼ù 4-19[ÔÚÏß]
UAF¼Ü¹¹ÌåϵÓëʵ¼ù 4-11[±±¾©]
AIÖÇÄÜ»¯Èí¼þ²âÊÔ·½·¨Óëʵ¼ù 5-23[ÉϺ£]
»ùÓÚ UML ºÍEA½øÐзÖÎöÉè¼Æ 4-26[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼ÆÓ뽨ģ 4-18[±±¾©]

AndroidÊÖ»ú¿ª·¢£¨Ò»£©
Àí½âJavascript
·ÇµäÐÍajaxʵ¼ù
³¹µ×µÄAjax
javascript ʹÓÃCookies
ʹÓà jQuery ¼ò»¯ Ajax ¿ª·¢

Struts+Spring+Hibernate
»ùÓÚJ2EEµÄWeb 2.0Ó¦Óÿª·¢
J2EEÉè¼ÆÄ£Ê½ºÍÐÔÄܵ÷ÓÅ
Java EE 5ÆóÒµ¼¶¼Ü¹¹Éè¼Æ
Javaµ¥Ôª²âÊÔ·½·¨Óë¼¼Êõ
Java±à³Ì·½·¨Óë¼¼Êõ

ijº½¿Õ¹«Ë¾IT²¿ JavaScriptʵ¼ù
ijµçÊÓÈí¼þ HTML5ºÍJavaScript
Öк½ÐÅ JavaScript¸ß¼¶Ó¦Óÿª·¢
´óÇìÓÍÌï web½çÃæAjax¿ª·¢¼¼Êõ
ºÍÀûʱ ʹÓÃAJAX½øÐÐWEBÓ¦Óÿª·¢