diff --git a/cms/static/js/spec/utils/handle_iframe_binding_spec.js b/cms/static/js/spec/utils/handle_iframe_binding_spec.js index b41794e64e..2375d08083 100644 --- a/cms/static/js/spec/utils/handle_iframe_binding_spec.js +++ b/cms/static/js/spec/utils/handle_iframe_binding_spec.js @@ -1,7 +1,7 @@ define( [ "jquery", "underscore", - "js/utils/handle_iframe_binding", + "js/utils/handle_iframe_binding" ], function ($, _, IframeBinding) { @@ -33,5 +33,14 @@ function ($, _, IframeBinding) { '' + ''); }); + + it("does not modify src url of DOM iframe if it is empty", function () { + iframe_html = ''; + doc.body.innerHTML = iframe_html; + + IframeBinding.iframeBinding(doc); + + expect($(doc).find("iframe")[0].src).toEqual(""); + }); }); }); diff --git a/cms/static/js/utils/handle_iframe_binding.js b/cms/static/js/utils/handle_iframe_binding.js index 4a9f5dc798..e106d01ae5 100644 --- a/cms/static/js/utils/handle_iframe_binding.js +++ b/cms/static/js/utils/handle_iframe_binding.js @@ -1,12 +1,12 @@ define(["jquery"], function($) { var iframeBinding = function (e) { var target_element = null; - if (typeof(e) == "undefined"){ + if (typeof(e) === "undefined") { target_element = $("iframe, embed"); } else { - if (typeof(e.nodeName) != 'undefined'){ + if (typeof(e.nodeName) !== 'undefined') { target_element = $(e).find("iframe, embed"); - } else{ + } else { target_element = e.$("iframe, embed"); } } @@ -14,21 +14,27 @@ define(["jquery"], function($) { }; var modifyTagContent = function (target_element) { - target_element.each(function(){ - if ($(this).prop('tagName') == 'IFRAME'){ + target_element.each(function() { + if ($(this).prop('tagName') === 'IFRAME') { var ifr_source = $(this).attr('src'); - var wmode = "wmode=transparent"; - if(ifr_source.indexOf('?') != -1) { - var getQString = ifr_source.split('?'); - if (getQString[1].search('wmode=transparent') == -1){ - var oldString = getQString[1]; - var newString = getQString[0]; - $(this).attr('src',newString+'?'+wmode+'&'+oldString); + + // Modify iframe src only if it is not empty + if (ifr_source) { + var wmode = "wmode=transparent"; + if (ifr_source.indexOf('?') !== -1) { + var getQString = ifr_source.split('?'); + if (getQString[1].search('wmode=transparent') === -1) { + var oldString = getQString[1]; + var newString = getQString[0]; + $(this).attr('src', newString + '?' + wmode + '&' + oldString); + } + } + else { + $(this).attr('src', ifr_source + '?' + wmode); } } - else $(this).attr('src',ifr_source+'?'+wmode); } - else{ + else { $(this).attr('wmode', 'transparent'); } });