Mercurial > repos > saskia-hiltemann > ireport
comparison iframe-resizer/test/v1.html @ 0:ac5f9272033b draft
first upload
author | saskia-hiltemann |
---|---|
date | Tue, 01 Jul 2014 11:42:23 -0400 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:ac5f9272033b |
---|---|
1 <!DOCTYPE html> | |
2 <html> | |
3 <head> | |
4 <meta charset="utf-8"> | |
5 <title>QUnit LoadHide</title> | |
6 <link rel="stylesheet" href="resources/qunit.css"> | |
7 </head> | |
8 <body> | |
9 <div id="qunit"></div> | |
10 <div id="qunit-fixture"> | |
11 | |
12 <div style="width:600px;"> | |
13 <iframe src="resources/frame.content.html" width="100%" scrolling="no"></iframe> | |
14 </div> | |
15 | |
16 </div> | |
17 <script src="resources/qunit.js"></script> | |
18 <script src="resources/jquery.js"></script> | |
19 <script> | |
20 /* | |
21 * File: jquery.iframeSizer.js | |
22 * Desc: Force cross domain iframes to size to content. | |
23 * Requires: iframeSizer.contentWindow.js to be loaded into the target frame. | |
24 * Author: David J. Bradshaw - dave@bradshaw.net | |
25 * Date: 2013-06-14 | |
26 */ | |
27 | |
28 | |
29 (function($) { | |
30 | |
31 var | |
32 msgId = '[iFrameSizer]', //Must match iframe msg ID | |
33 msgIdLen = msgId.length, | |
34 count = 0, | |
35 settings, | |
36 defaults = { | |
37 log: true, | |
38 contentWindowBodyMargin:8, | |
39 doHeight:true, | |
40 doWidth:false, | |
41 interval:0, | |
42 enablePublicMethods:false, | |
43 callback:function(){} | |
44 }; | |
45 | |
46 | |
47 function setupRAF(){ | |
48 var | |
49 vendors = ['moz', 'webkit', 'o', 'ms'], | |
50 x; | |
51 | |
52 // Remove vendor prefixing if prefixed and break early if not | |
53 for (x = 0; x < vendors.length && !window.requestAnimationFrame; x += 1) { | |
54 window.requestAnimationFrame = window[vendors[x] + 'RequestAnimationFrame']; | |
55 } | |
56 | |
57 // If not supported then just call callback | |
58 if (!window.requestAnimationFrame){ | |
59 log(' RequestAnimationFrame not supported'); | |
60 window.requestAnimationFrame = function(callback){ | |
61 callback(); | |
62 }; | |
63 } | |
64 | |
65 } | |
66 | |
67 function log(msg){ | |
68 if (window.console){ | |
69 console.log(msgId + '[Host page]' + msg); | |
70 } | |
71 } | |
72 | |
73 setupRAF(); | |
74 | |
75 $(window).on('message',function(event){ | |
76 function receiver(msg) { | |
77 function resize(){ | |
78 function setDimension(dimension){ | |
79 window.requestAnimationFrame(function(){ | |
80 messageData.iframe.style[dimension] = messageData[dimension] + 'px'; | |
81 log( ' ' + messageData.iframe.id + ' ' + dimension + ' set to ' + messageData[dimension] + 'px'); | |
82 }); | |
83 } | |
84 | |
85 if(settings.doHeight){ | |
86 setDimension('height'); | |
87 } | |
88 | |
89 if(settings.doWidth){ | |
90 setDimension('width'); | |
91 } | |
92 } | |
93 | |
94 function processMsg(){ | |
95 var data = msg.substr(msgIdLen).split(':'); | |
96 | |
97 messageData = { | |
98 iframe: document.getElementById(data[0]), | |
99 height: data[1], | |
100 width: data[2] | |
101 }; | |
102 } | |
103 | |
104 var messageData = {}; | |
105 | |
106 //check message is for us. | |
107 if (msgId === msg.substr(0,msgIdLen)){ | |
108 processMsg(); | |
109 resize(); | |
110 settings.callback(messageData,settings); | |
111 } | |
112 } | |
113 | |
114 receiver(event.originalEvent.data); | |
115 }); | |
116 | |
117 | |
118 $.fn.iFrameSizer = function(options){ | |
119 | |
120 settings = $.extend( {}, defaults, options ); | |
121 | |
122 return this.each(function(){ | |
123 function isIframe(){ | |
124 return iframe.contentWindow ? true : false; | |
125 } | |
126 | |
127 //We have to call trigger twice, as we can not be sure if all | |
128 //iframes have completed loading when this code runs. | |
129 function init(){ | |
130 iframe.style.overflow = 'hidden'; | |
131 iframe.scrolling = 'no'; | |
132 | |
133 $(iframe).on('load',function(){ | |
134 trigger('iFrame.onload'); | |
135 }); | |
136 trigger('init'); | |
137 } | |
138 | |
139 function trigger(calleeMsg){ | |
140 | |
141 function ensureHasId(){ | |
142 if (''===iframe.id){ | |
143 iframe.id = 'iFrameSizer' + count++; | |
144 log(' Added missing iframe ID: '+iframe.id); | |
145 } | |
146 } | |
147 | |
148 function postMessageToIframe(){ | |
149 var msg = iframe.id + ':' + settings.contentWindowBodyMargin + ':' + settings.doWidth + ':' + | |
150 settings.log + ':' + settings.interval + ':' + settings.enablePublicMethods; | |
151 log('[' + calleeMsg + '] Sending init msg to iframe ('+msg+')'); | |
152 iframe.contentWindow.postMessage( msgId + msg, '*' ); | |
153 } | |
154 | |
155 ensureHasId(); | |
156 postMessageToIframe(); | |
157 } | |
158 | |
159 var iframe = this; | |
160 | |
161 if (isIframe()){ | |
162 init(); | |
163 } | |
164 }); | |
165 }; | |
166 | |
167 })( window.jQuery ); | |
168 | |
169 | |
170 </script> | |
171 <script> | |
172 | |
173 'use strict'; | |
174 var msgId = '[iFrameSizerTest]:'; | |
175 | |
176 asyncTest( "postMessage Response", function() { | |
177 | |
178 $('iframe').iFrameSizer({ | |
179 callback:function(messageData){ | |
180 //console.log('Receive message back from iFrame.') | |
181 ok( true, 'Receive message back from iFrame.' ); | |
182 ok( '600' === messageData.width, 'iFrame width = 600.' ); | |
183 start(); | |
184 } | |
185 }); | |
186 }); | |
187 | |
188 </script> | |
189 </body> | |
190 </html> |