Skip to content

Commit

Permalink
[iframely.js] fix iframe messaging using JSON
Browse files Browse the repository at this point in the history
  • Loading branch information
nleush committed Nov 11, 2013
1 parent 8c22563 commit 586ee55
Show file tree
Hide file tree
Showing 3 changed files with 55 additions and 19 deletions.
24 changes: 18 additions & 6 deletions static/js/iframely-for-iframe.js
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,8 @@
return {
postMessage : function(message, target_url, target) {

message = JSON.stringify(message);

target_url = target_url || '*';

target = target || window.parent; // default to parent
Expand All @@ -27,12 +29,22 @@

receiveMessage : function(callback) {

function cb(e) {
var message;
try {
message = JSON.parse(e.data);
} catch (ex) {
}

callback(e, message);
}

// browser supports window.postMessage
if (window['postMessage']) {
if (window['addEventListener']) {
window[callback ? 'addEventListener' : 'removeEventListener']('message', callback, !1);
window[callback ? 'addEventListener' : 'removeEventListener']('message', cb, !1);
} else {
window[callback ? 'attachEvent' : 'detachEvent']('onmessage', callback);
window[callback ? 'attachEvent' : 'detachEvent']('onmessage', cb);
}
}
}
Expand All @@ -42,11 +54,11 @@
$.iframely = $.iframely || {};
$.iframely.iframes = $.iframely.iframes || {};

windowMessaging.receiveMessage(function(e) {
windowMessaging.receiveMessage(function(e, message) {
var $iframe;
if (e.data && e.data.windowId && ($iframe = $.iframely.iframes[e.data.windowId])) {
if ($.iframely.setIframeHeight && e.data.method == "resize" && e.data.height) {
$.iframely.setIframeHeight($iframe, e.data.height);
if (message && message.windowId && ($iframe = $.iframely.iframes[message.windowId])) {
if ($.iframely.setIframeHeight && message.method === "resize" && message.height) {
$.iframely.setIframeHeight($iframe, message.height);
}
}
});
Expand Down
26 changes: 19 additions & 7 deletions static/js/iframely-utils.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,11 +4,13 @@

$.iframely = $.iframely || {};

var XD = function(){
var windowMessaging = function(){

return {
postMessage : function(message, target_url, target) {

message = JSON.stringify(message);

target_url = target_url || '*';

target = target || window.parent; // default to parent
Expand All @@ -23,12 +25,22 @@

receiveMessage : function(callback) {

function cb(e) {
var message;
try {
message = JSON.parse(e.data);
} catch (ex) {
}

callback(e, message);
}

// browser supports window.postMessage
if (window['postMessage']) {
if (window['addEventListener']) {
window[callback ? 'addEventListener' : 'removeEventListener']('message', callback, !1);
window[callback ? 'addEventListener' : 'removeEventListener']('message', cb, !1);
} else {
window[callback ? 'attachEvent' : 'detachEvent']('onmessage', callback);
window[callback ? 'attachEvent' : 'detachEvent']('onmessage', cb);
}
}
}
Expand All @@ -38,10 +50,10 @@
var windowId;
var heightGetter;

XD.receiveMessage(function(e) {
windowMessaging.receiveMessage(function(e, message) {

if (e.data.method == "register") {
windowId = e.data.windowId;
if (message && message.method && message.method === "register") {
windowId = message.windowId;

var height;

Expand All @@ -50,7 +62,7 @@

if (h && h != height && (h > height || !height)) {
height = h;
XD.postMessage({
windowMessaging.postMessage({
windowId: windowId,
method: 'resize',
height: height
Expand Down
24 changes: 18 additions & 6 deletions static/js/iframely.js
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,8 @@
return {
postMessage : function(message, target_url, target) {

message = JSON.stringify(message);

target_url = target_url || '*';

target = target || window.parent; // default to parent
Expand All @@ -29,12 +31,22 @@

receiveMessage : function(callback) {

function cb(e) {
var message;
try {
message = JSON.parse(e.data);
} catch (ex) {
}

callback(e, message);
}

// browser supports window.postMessage
if (window['postMessage']) {
if (window['addEventListener']) {
window[callback ? 'addEventListener' : 'removeEventListener']('message', callback, !1);
window[callback ? 'addEventListener' : 'removeEventListener']('message', cb, !1);
} else {
window[callback ? 'attachEvent' : 'detachEvent']('onmessage', callback);
window[callback ? 'attachEvent' : 'detachEvent']('onmessage', cb);
}
}
}
Expand All @@ -50,11 +62,11 @@
$.iframely = $.iframely || {};
$.iframely.iframes = $.iframely.iframes || {};

windowMessaging.receiveMessage(function(e) {
windowMessaging.receiveMessage(function(e, message) {
var $iframe;
if (e.data && e.data.windowId && ($iframe = $.iframely.iframes[e.data.windowId])) {
if ($.iframely.setIframeHeight && e.data.method == "resize" && e.data.height) {
$.iframely.setIframeHeight($iframe, e.data.height);
if (message && message.windowId && ($iframe = $.iframely.iframes[message.windowId])) {
if ($.iframely.setIframeHeight && message.method === "resize" && message.height) {
$.iframely.setIframeHeight($iframe, message.height);
}
}
});
Expand Down

1 comment on commit 586ee55

@iparamonau
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This fixes #29

Please sign in to comment.