рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрд┐рди рд▓реЛрдЧреЛрдВ рдиреЗ рдЕрдкрдиреЗ рдХрд╛рдо рдореЗрдВ iframes рдХрд╛ рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рд╣реИ, рдЙрдирдореЗрдВ рд╕реЗ рдХрдИ рдиреЗ рдЗрд╕ iframe рдХреА рдКрдВрдЪрд╛рдИ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рдХрд╛рд░реНрдп рдХрд╛ рднреА рд╕рд╛рдордирд╛ рдХрд┐рдпрд╛ рд╣реИред
рдпрд╣ рдЖрд╡рд╢реНрдпрдХ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдЬрдм рдЖрдк рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛рдУрдВ рдХреЛ рдЕрдкрдиреА рд╕рд╛рдЗрдЯ рд╕реЗ рдЕрдкрдиреА рд╕рд╛рдЗрдЯ рдкрд░ рд╡рд┐рдЬреЗрдЯреНрд╕ рд╕рдХреНрд╖рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рдХреНрд╖рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рдФрд░ рдЖрдк рд╡рд┐рдЬреЗрдЯ рдХреЗ рдХрдВрдЯреЗрдирд░ (iframe) рдХреЛ рдЗрд╕ рд╡рд┐рдЬреЗрдЯ рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рдЖрдХрд╛рд░ рд╕реЗ рдореЗрд▓ рдЦрд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред
рдпреИрдВрдбреЗрдХреНрд╕ рдореЗрдВ, рдЖрдк рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХреЗ рдХрдИ рд╕рдорд╛рдзрд╛рди рдкрд╛ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЙрдирдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рдореЗрдВ рдПрдХ рд╕рдорд╕реНрдпрд╛ рд╣реИ: рд╡реЗ рд╡рд┐рдВрдбреЛ рдХрд╛ рдЖрдХрд╛рд░ рдмрджрд▓рдиреЗ рдХреА рдХреНрд╖рдорддрд╛ рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ рдЬрдм рдЖрдИрдлреНрд░реЗрдо рдФрд░ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдХреА рд╕рд╛рдордЧреНрд░реА рдЕрд▓рдЧ-рдЕрд▓рдЧ рдбреЛрдореЗрди рдкрд░ рд╣реЛрддреА рд╣реИред
рдПрдХ рдЕрдЪреНрдЫрд╛ рдХреНрд░реЙрд╕-рдбреЛрдореЗрди рд╕рдорд╛рдзрд╛рди рд╣реИ , рд▓реЗрдХрд┐рди рдпрд╣ 2007 рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рддрдм рд╕реЗ рдмрд╣реБрдд рдХреБрдЫ рдмрджрд▓ рдЧрдпрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП, рдореБрдЭреЗ рдЙрдкрд░реЛрдХреНрдд рд╕рдорд╛рдзрд╛рди рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдЗрд╕ рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╣рд▓ рд╕реНрд╡рдпрдВ рд╡рд┐рдХрд╕рд┐рдд рдХрд░рдирд╛ рдкрдбрд╝рд╛ред
рджрд░рдЕрд╕рд▓, рдЬреЛ рдореБрдЦреНрдп рдЪреАрдЬ рдмрджрд▓ рдЧрдИ рд╣реИ рд╡рд╣ рд╣реИ window.postMessage рдЯреВрд▓, рдЬреЛ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рд╡рд┐рдВрдбреЛ рдХреЛ рд╕рдВрджреЗрд╢реЛрдВ рдХрд╛ рдЖрджрд╛рди-рдкреНрд░рджрд╛рди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред рдЗрд╕рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╣рдо рдЙрдкрд░реЛрдХреНрдд рд╕рдорд╛рдзрд╛рди рдХрд╛ рдПрдХ рдПрдирд╛рд▓реЙрдЧ рдмрдирд╛ рд╕рдХрддреЗ рд╣реИрдВ, рдЬрд┐рд╕рдореЗрдВ рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рдлрд╛рдпрджреЗ рд╣реИрдВ:
- рдирдП рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рд╣реИрд╢ рдореЗрдВ рдХреЛрдИ рд╕реНрдкреИрдо рдирд╣реАрдВ рд╣реЛрдЧрд╛ (рдФрд░ рдЙрд╕реА рд╕рдордп рдХреНрд▓рд╛рдЗрдВрдЯ рдкреЗрдЬ рдкрд░ рд╣реИрд╢ рдиреЗрд╡рд┐рдЧреЗрд╢рди рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдХрд╛рдо рдХрд░реЗрдЧрд╛)
- рд╡реЗрдмрдХрд┐рдЯ рдореЗрдВ рд╕рд╣реА рдХрд╛рдо
- рд╕рд░рд▓ рдФрд░ рд╕реНрдкрд╖реНрдЯ рдХреЛрдб
рд╣рдорд╛рд░рд╛ рдХреЛрдб рдХрд┐рд╕реА рднреА рдмрд╛рд╣рд░реА рдХрд╛рд░рдХреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП, рдФрд░ рдЗрд╕рдХреЗ рдЙрдкрдпреЛрдЧ рдХреЗ рд▓рд┐рдП рдлреНрд░реЗрдо рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рдХрд┐рдирд╛рд░реЗ рдкрд░ 2 рдЬреЗрдПрд╕ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП (рдкреЛрд╕реНрдЯрдореЗрдЬрд╝реЗрдЬ рдХреЗ рд▓рд┐рдП рдПрдХ, рдФрд░ рдЪреЛрд░ - рд╣рдорд╛рд░рд╛), рдФрд░ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рддрд░рдл рднреА 2 рдЬреЗрдПрд╕ рдлрд╝рд╛рдЗрд▓реЛрдВ рдХреЛ рдХрдиреЗрдХреНрдЯ рдХрд░реЗрдВ рдФрд░ рдЬреЛрдбрд╝реЗрдВ Iframe рдкрд░ рджреЛ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рд╣реИрдВ - id рдФрд░ рдирд╛рдо (рд╕рдорд╛рди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП), рдФрд░ ifload рдкрд░ рднреА iframe рдкрдВрдЬреАрдХрд░рдг рд▓рдЯрдХрд╛ рд╣реБрдЖ рд╣реИред
рдкреЛрд╕реНрдЯрдореЗрдЬрд╝реЗрдЬ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╣рдо рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд рд▓рд╛рдЗрдмреНрд░реЗрд░реА рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░реЗрдВрдЧреЗ:
postmessage.freebaseapps.comрдпрд╣ рд▓рд╛рдЗрдмреНрд░реЗрд░реА window.postMessage рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╣реА рд╕реБрд╡рд┐рдзрд╛рдЬрдирдХ рдЖрд╡рд░рдг рд╣реИ, рдЬреЛ рдЕрдиреНрдп рдмрд╛рддреЛрдВ рдХреЗ рдЕрд▓рд╛рд╡рд╛, рдЖрдкрдХреЛ рдЙрди рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рдореЗрдВ рд╣реИрд╢ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдбреЗрдЯрд╛ рдЯреНрд░рд╛рдВрд╕рдлрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬреЛ window.postMessage рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВред
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХрд╛ рддрд░реНрдХ рдмреЗрд╣рдж рд╕рд░рд▓ рд╣реИ - рдХреНрд▓рд╛рдЗрдВрдЯ рдкреЗрдЬ рдкрд░ рд╣рдо рдПрдХ iframe "рд░рдЬрд┐рд╕реНрдЯрд░" рдХрд░рддреЗ рд╣реИрдВ - рд╣рдо рдЗрд╕ рдЖрдЗрдлреНрд░реЗрдо рдХреЗ рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ рдЪрд╛рдЗрд▓реНрдб рдкреЗрдЬ (рдЬреЛ iframe рдореЗрдВ рд╣реИ) рдкрд░ рднреЗрдЬрддреЗ рд╣реИрдВ рдФрд░ рдЪрд╛рдЗрд▓реНрдб рдкреЗрдЬ рд╕реЗ рд╕рдВрджреЗрд╢реЛрдВ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрддреЗ рд╣реИрдВред рд╕рдВрджреЗрд╢ рдкреНрд░рд╛рдкреНрдд рд╣реЛрдиреЗ рдкрд░ - рдЖрдХрд╛рд░ рдмрджрд▓реЗрдВред
рдЪрд╛рдЗрд▓реНрдб рдкреЗрдЬ рдХреА рддрд░рдл (рдЬреЛ iframe рдореЗрдВ рд╣реИ), рд╣рдо рдмрджрд▓реЗ рдореЗрдВ рдЖрдиреЗ рдкрд░ рдкрдВрдЬреАрдХрд░рдг рд╕рдВрджреЗрд╢реЛрдВ рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реЗрддреЗ рд╣реИрдВ - рд╣рдо рдкрд╣рдЪрд╛рдирдХрд░реНрддрд╛ рдХреЛ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдЯрд╛рдЗрдорд░ рдХреЛ рдЪрд╛рд▓реВ рдХрд░рддреЗ рд╣реИрдВ, рдЬреЛ, рдЬрдм рдлрд╝реНрд░реЗрдо рд╕рд╛рдордЧреНрд░реА рдХрд╛ рдЖрдХрд╛рд░ рдмрджрд▓ рдЬрд╛рддрд╛ рд╣реИ, рддреЛ рдорд╛рддрд╛-рдкрд┐рддрд╛ рдкреГрд╖реНрда рдХреЛ рдпрд╣ рдЬрд╛рдирдХрд╛рд░реА рднреЗрдЬрддрд╛ рд╣реИ рдХрд┐ рдЖрдЗрдлреНрд░реЗрдо рдХрд╛ рдЖрдХрд╛рд░ рдкрд░рд┐рд╡рд░реНрддрди рдХрд┐рдпрд╛ рдЬрд╛рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдмрд╕ рдЗрддрдирд╛ рд╣реАред рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб рд╣реА:
FrameManager.js ("рдХреНрд▓рд╛рдЗрдВрдЯ" рд╕реНрдХреНрд░рд┐рдкреНрдЯ)
var FrameManager = { registerFrame : function(frame) { pm({ target: window.frames[frame.id], type: "register", data: {id:frame.id}, url: frame.contentWindow.location }); pm.bind(frame.id, function(data) { var iframe = document.getElementById(data.id); if (iframe == null) return; iframe.style.height = (data.height+12).toString() + "px"; }); } };
рдлрд╝реНрд░реЗрдо .js (рдлрд╝реНрд░реЗрдо рдХреА рд╕рд╛рдордЧреНрд░реА рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░рд┐рдкреНрдЯ)
var FrameHeightManager = { FrameId: '', getCurrentHeight : function() { myHeight = 0; if( typeof( window.innerWidth ) == 'number' ) { myHeight = window.innerHeight; } else if( document.documentElement && document.documentElement.clientHeight ) { myHeight = document.documentElement.clientHeight; } else if( document.body && document.body.clientHeight ) { myHeight = document.body.clientHeight; } return myHeight; }, publishHeight : function() { if (this.FrameId == '') return; // jQuery - if(typeof jQuery === "undefined") { var actualHeight = (document.body.scrollHeight > document.body.offsetHeight)?document.body.scrollHeight:document.body.offsetHeight; var currentHeight = this.getCurrentHeight(); } else { var actualHeight = $("body").height(); var currentHeight = $(window).height(); } if(Math.abs(actualHeight - currentHeight) > 20) { pm({ target: window.parent, type: this.FrameId, data: {height:actualHeight, id:this.FrameId} }); } } }; pm.bind("register", function(data) { FrameHeightManager.FrameId = data.id; // this window.setInterval(function() {FrameHeightManager.publishHeight.call(FrameHeightManager)}, 300); });
рдФрд░ 2 рдкрд░реАрдХреНрд╖рдг HTML рдкреГрд╖реНрда рд▓рд┐рдЦреЗрдВ:
test.html (рдореВрд▓)
<!DOCTYPE html> <html> <body> <script src="postmessage.js"></script> <script src="FrameManager.js"></script> <iframe height="10" id="frame1" name="frame1" src="test2.html" onload="FrameManager.registerFrame(this)" scrolling="no" frameborder="0" marginheight="0" marginwidth="0" ></iframe> </body> </html>
test2.html (рдмрдЪреНрдЪрд╛)
<!DOCTYPE html> <html> <body> <script src="postmessage.js"></script> <script src="Frame.js"></script> <div style="border:1px solid red;margin:0; height:200px;"> test </div> </body> </html>
рдмрд╛рд▓ рдкреГрд╖реНрда рдореЗрдВ, рдЖрдк jquery рдХрдиреЗрдХреНрд╢рди рдХреЗ рд╕рд╛рде рдХреЛрдб рдХрд╛ рдПрдХ рдЯреБрдХрдбрд╝рд╛ рднреА рдмреЗрдЪреИрди рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ - рдлрд┐рд░ рдКрдВрдЪрд╛рдИ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдирд╛ рдЕрдзрд┐рдХ рд╕рдЯреАрдХ рд╣реЛрдЧрд╛ред рдореИрдВ рдкреГрд╖реНрда рдФрд░ рдЦрд┐рдбрд╝рдХреА рдХреЗ рдЖрдХрд╛рд░ рдХреЛ рдирд┐рд░реНрдзрд╛рд░рд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╕рд╛рдорд╛рдиреНрдп рдХреНрд░реЙрд╕-рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдХрд╛рд░реНрдпреЛрдВ рдХреЗ рд▓рд┐рдП рдЖрднрд╛рд░реА рд░рд╣реВрдВрдЧрд╛, рдореИрдВрдиреЗ рдкрд╣рд▓реЗ рд╡рд╛рд▓реЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛, рдЬреЛ рдореБрдЭреЗ рдорд┐рд▓рд╛ - рд╡реЗ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рд╡реЗрдмрдХрд┐рдЯ рдореЗрдВ 10 рдкрд┐рдХреНрд╕реЗрд▓ рдПрдХ рддреНрд░реБрдЯрд┐ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддреЗ рд╣реИрдВред
рдпрд╣ рдореЗрд░реЗ рд▓рд┐рдП рдорд╣рддреНрд╡рдкреВрд░реНрдг рдирд╣реАрдВ рд╣реИ, рдХреНрдпреЛрдВрдХрд┐ рдореЗрд░реЗ рдкрд╛рд╕ рдХреНрд▓рд╛рдЗрдВрдЯ рдХреА рддрд░рдл (рдпрд╛рдиреА рдЪрд╛рдЗрд▓реНрдб рдкреЗрдЬ рдореЗрдВ) jquery рд╣реИ, рд▓реЗрдХрд┐рди рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ рдирд╣реАрдВ рд╣реЛ рд╕рдХрддреА рд╣реИ - рдлрд┐рд░ рдХреЛрдб рдЕрднреА рднреА рдХрд╛рдо рдХрд░реЗрдЧрд╛ред