JavaScript¿çÓòµÄ½â¾ö·½Ê½×ܽᣨ´úÂ룩
ͬԴÕþ²ß£ººÍ̸¡¢ÓòÃû¡¢¶Ë¿Ú¾ùÀ×ͬ¡£
·ÇͬԴÏÞÖÆ£º
cookie¡¢localStorage¡¢indexDBû·¨¶ÁÈ¡¡£
DOMû·¨ÁÔÈ¡¡£
AJAX¿ÒÇóû·¨·¢ËÍ¡£
½â¾ö·½Ê½£º
Ò»¡¢JSONP
µÀÀí£ºÍ¨¹ý¶¯Ì¬Ôö¼ÓÒ»¸ö<script>ÔªËØ£¬ÏòЧÀÍÆ÷¿ÒÇóJSONÊý¾Ý¡£Ð§ÀÍÆ÷½ÓÊÕ¿ÒÇ󷵻ص½Ö¸¶¨¾ßÃû»Øµ÷º¯Êý¡£
eg:
function addScript(src) { var script = document.createElement('script'); script.setAttribute("type", "text/javscript"); script.src = src; document.body.appendChild(script); } window.onload = function() { addScript("https://segmentfault.com/data?callback=getData"); } function getData(data) { console.log(data) }
ÁôÒ⣺
1¡¢²éѯµÄUrlÖÐcallbackÐèÒªÖ¸¶¨»Øµ÷º¯ÊýµÄÃû×Ö¡£
2¡¢<script>ÔÚÔĶÁÆ÷×÷Ϊ´úÂëÔËת£¬¶¨ÒåµÄgetDataº¯Êý»á±»ÂíÉϵ÷È¡¡£
3¡¢·µ»ØµÄJSON²ÎÊý×÷Ϊjavascript¶ÔÏ󣬲»ÊÇ×Ö·û´®£¬²»ÐèҪֹͣJSONת»»¡£
4¡¢jquery¿âµÄ $.getJSON()Ò²¿ÉÒÔʵÏÖ¡£
$.getJSON("https://segmentfault.com/data?callback=?", function(data) { console.log(data) })
ȱÏÝ£ºÊÇGET·½Ê½ÁÔÈ¡£¬²»Ö§³Å POST¡£
¶þ¡¢window.postMessage
window.postMessage ²»¹Ü¿É·ñͬԴ¶¼Í¬Òâ¿ç´°¿ÚͨѶ¡£ postMessage ²ÎÊýÒ»ÊÇ´«µÝÄÚÈÝ£¬²ÎÊý¶þÊǺÍ̸+ÓòÃû+¶Ë¿Ú»òÕߣ¨*±íʾ²»ÏÞÖÆÓòÃû£©
Ò³ÃæÒ»£º"https://www.segmentfault.com/page1.html" //´«µÝÒ³Ãæ <script> window.onload = function () { if (typeof window.postMessage === undefined) { alert("ÔĶÁÆ÷²»Ö§³ÅpostMessage£¡"); } else { window.open.postMessage({data: "Hello World"}, "https://www.example.com/page2.html"); } } </script>
Ò³Ãæ¶þ£º"https://www.example.com/page2.html" //½ÓÊÕÒ³Ãæ <script> window.addEventListener('message', function(e) { console.log(e.data); },false); </script>
ʼþ½ÓÊÕwindow.addEventListener('message', function(){});ÖеÄmessageʼþ¶ÔÏóeventÓÐÈý¸öÊôÐÔ£º
1¡¢event.source£º·¢ËÍÐÂÎŵĴ°¿Ú
2¡¢event.origin: ÐÂÎÅ·¢ÏòµÄÍøÖ·
3¡¢event.data: ÐÂÎÅÄÚÈÝ
<script> //Ô®Óø¸´°¿Ú·¢ËÍÐÅÏ¢¸øÏÂÒ»¸ö´°¿Ú window.addEventListener('message', receiveMessage); function receiveMessage(event) { event.source.postMessage('Nice to see you!', '*'); } </script>
<script> //¹ýÂ˲»ÊÇ·¢¸ø±¾´°¿ÚµÄÐÅÏ¢ window.addEventListener('message', receiveMessage); function receiveMessage(event) { if (event.origin !== 'http://www.segmentfault.com/page1.html') return; if (event.data === 'Hello World') { event.source.postMessage('Hello', event.origin); } else { console.log(event.data); } } </script>
Èý¡¢iframe
iframeÔØÈëÒ³ÃæºÍsrcÀïÃæµÄÄ¿±êÓòÊÇͳһ¸öÓò£¬ÊÇÄܹ»·¢Æðajax¿ÒÇ󣨸¸×Ó´°¿Ú£©¡£ //Ç°ÌáÊÇͬԴ£¬²»Ò»ÑùÔ´¾Í²»³ÉÒÔ·¢Æðajax¿ÒÇó¡£
²»Ò»Ñù´°¿ÚͬԴ֮¼äÊÇ¿ÉÒÔÁÔÈ¡window¶ÔÏ󣬵«ÊDz»¿Ë²»¼°ÁÔÈ¡window¶ÔÏóµÄÊôÐԺͰ취¡£ //²»Ò»ÑùÔ´»á±¨´í
1¡¢document.domain + iframe£¨Í¬Ô´¿ÉÓà -- ¿ç×ÓÓò£©
document.domainÊôÐÔ£º1¼¶ÓòÃûÀ×ͬ£¬¶þ¼¶ÓòÃû²»Ò»Ñù¿ÉÒÔʵÏÖwindow¶ÔÏóÁÔÈ¡¡£
Ò³ÃæÒ»£º"https://segmentfault.com/page1.html" <script> window.onload = function() { document.domain = "https://segmentfault.com/"; //É趨domain window.getData = function() { //ajax¿ÒÇó } } </script>
Ò³Ãæ¶þ£º"https://segmentfault.com/page2.html" <iframe id="iframe" src="https://segmentfault.com/page1.html" onload="test()"></iframe> <script> //¶¯Ì¬´´Á¢iframe×îºÃ£¬ÁÔÈ¡ÍêÊý¾ÝÉÕ»Ù¡£ //document.domainÉ趨³É±¾Éí»ò¸ü¸ß1¼¶µÄ¸¸Óò£¬Ö÷Óò±ØÐèÀ×ͬ¡£ document.domain = "https://segmentfault.com/" //É趨domain function test() { var win = document.getElementById("iframe").contentWindow; win.getData("https://segmentfault.com/json_domain.php", function() {}) } </script>
ȱÏÝ£ºÖ÷ÓòÃûµÃÒ»Ö¡£
2¡¢window.name + iframe£¨·ÇͬԴ¿ÉÓã©
window.nameÊôÐÔ£ºÔÚÒ»¸ö´°¿ÚµÄÉúÃüÖÜÆÚÄÚ£¬²»¹Ü¿É·ñͬԴ£¬Í³Ò»¸ö´°¿ÚµÄÔØÈëÒ³Ãæwindow.nameÊôÐÔÊÇͬÏíµÄ£¬Ã¿¸öÒ³Ã涼¿ÉÒÔ²Ù×Ý¡£
Ò³ÃæÒ»£º"https://segmentfault.com/page1.html" <script> window.name = "this is data!" </script>
Ò³Ãæ¶þ£º"https://segmentfault.com/page2.html" <iframe id="iframe" src="https://segmentfault.com/page1.html" onload="test()"></iframe> <script> //¶¯Ì¬´´Á¢iframe×îºÃ£¬ÁÔÈ¡ÍêÊý¾ÝÉÕ»Ù¡£ //ÁÔÈ¡window.name function test() { var winName = document.getElementById("iframe").contentWindow.name; winName.src = "https://segmentfault.com/data.html"; //×îºóÐèÒª½«iframeµÄsrcÉ趨³Éµ±Ç°ÓòµÄÒ»¸öÒ³ÃæµØÖ· } </script>
ȱÏÝ£º¼æÈÝÐÔ²»ºÃ
3¡¢location.hash + iframe£¨·ÇͬԴ¿ÉÓã©
Ƭ¶Î±êʶ·û£ºÆ¬¶Î±êʶ·ûÊÇÖ¸url#ºÅºóÃæµÄ²¿·Ö¡£Ö»ÊǸĶ¯Æ¬¶Î±êʶ·ûÒ³Ã治ˢС£
Ò³ÃæÒ»£º"https://www.segmentfault.com/page1.html" <script> function startRequest(){ var ifr = document.createElement('iframe'); ifr.style.display = 'none'; ifr.src = 'https://www.example.com/page2.html#messgae'; document.body.appendChild(ifr); } function checkHash() { var data = location.hash ? location.hash.substring(1) : ''; } setInterval(checkHash, 2000); </script>
Ò³Ãæ¶þ£º"https://www.example.com/page2.html#messgae" <script> function callBack(){ try { parent.location.hash = 'somedata'; } catch (e) { // ie¡¢chromeµÄƽ°²»úÖÆû·¨ÐÞ¸Äparent.location.hash£¬ // ËùÒÔÒªÀûÓÃÒ»¸öÖÐÐĵÄexampleÓòϵĴúÀíiframe var ifrproxy = document.createElement('iframe'); ifrproxy.style.display = 'none'; ifrproxy.src = 'https:/www.segmentfault.com/page3html#somedata'; // ÁôÒâ¸ÃÎļþÔÚ"segmentfault.com"ÓòÏ document.body.appendChild(ifrproxy); } } </script>
Ò³ÃæÈý£º"ttps:/www.segmentfault.com/page3html#somedata" <script> //ÓÉÓÚparent.parentºÍ±¾ÉíÊôÓÚͳһ¸öÓò£¬ËùÒÔ¿ÉÒԸĶ¯Æälocation.hashµÄÖµ parent.parent.location.hash = self.location.hash.substring(1); </script>
ȱÏÝ£ºÊý¾ÝÏÔ¶ÔÚurl£¬³¤¶ÈÒ²ÓÐÏÞÖÆ¡£
ËÄ¡¢WebSocket
WebSocket£ºÔĶÁÆ÷ͨ¹ý JavaScript ÏòЧÀÍÆ÷·¢³ö´´Á¢ WebSocket Á¬½ÓµÄ¿ÒÇó£¬Á¬½Ó´´Á¢½ñºó£¬¿Í»§¶ËºÍЧÀÍÆ÷¶Ë¾Í¿ÉÒÔͨ¹ý TCP Á¬½ÓÖ±½Ó½»Á÷Êý¾Ý¡£
É趨WebSocket¿ÒÇóÍ·ÐÅÏ¢£¬Ð§ÀÍÆ÷Ö§³Å¾Í¿ÉÒÔÍ£Ö¹¡£
Origin: http://example.com //°´ÕÕÓòÃû¿É·ñÔÚ°×Ãûµ¥ÄÚÀ´ÍƶϿɷñ¿ÉÒÔͨѶ
ȱÏÝ£ºÊµÏֳɱ¾¸ß¡£
Îå¡¢CORS
corsÊÇ¿çÓò×ÊÔ´·ÖÏí¡£ÏÖCORSͨѶµÄ¹Ø¼üÊÇЧÀÍÆ÷¡£Ö»ÒªÐ§ÀÍÆ÷ʵÏÖÁËCORS½Ó¿Ú£¬¾Í¿ÉÒÔ¿çԴͨѶ¡£
ȱÏÝ£ºÐ§ÀÍÆ÷ÅäÖã¬Õ¼ÓÃÖ÷Óò´ø¿í¡£
±¾ÆªÎÄÕµ½ÕâÀï¾ÍÒѾȫ²¿Íê±ÏÁË£¬¸ü¶àÆäËû³öÉ«ÄÚÈÝ¿ÉÒÔ¹Ø×¢PHPÖÐÎÄÍøµÄJavaScriptÊÓƵ½Ì³ÌÀ¸Ä¿£¡
ÒÔÉϾÍÊÇJavaScript¿çÓòµÄ½â¾ö·½Ê½×ܽᣨ´úÂ룩µÄ¾ßÌåÄÚÈÝ£¬¸ü¶àÇë¹Ø×¢°Ù·Ö°ÙÔ´ÂëÍøÆäËüÏà¹ØÎÄÕ£¡
¸ÐлÄúµÄÖ§³Ö£¬ÎÒ»á¼ÌÐøŬÁ¦µÄ!
´ò¿ªÖ§¸¶±¦É¨Ò»É¨£¬¼´¿É½øÐÐɨÂë´òÉÍŶ
°Ù·Ö°ÙÔ´ÂëÍø ½¨Òé´òÉÍ1¡«10Ôª£¬ÍÁºÀËæÒ⣬¸ÐлÄúµÄÔĶÁ£¡