1

Hi I have written some javascript code to generate an iFrame and insert content inside. But I don't want to use setTimeout and I want to refactor the code. I tried to use document.ready() and window.onLoad() and they don't work.

This is my code:

    onShow: function() {
        //TODO: why 200 ms wait? why not wait for specific event
        setTimeout(this.injectHtml.bind(this), 200);
    },

    injectHtml: function() {
        var iframe = this.el;
        if (iframe.contentWindow === null) { //Check for contentWindow for null.
            $(iframe).html(this.params.html);
        } else { //If contentWindow is present then open the document for writing.
            iframe = iframe.contentWindow;
            iframe.document.open('text/html');
            iframe.document.write(this.params.html);
            iframe.document.close();
            $(this.el).on('load', function() {
                var iframe = $(this).contents();
                iframe.find("#langSelect").off("change");
                iframe.find("#langSelect").on("change", function() { //If another language is selected from Dropdown.
                    abc.languages.setSelected($(this).val());
                    abc.elements.setLanguage();
                    Vent.trigger(Vent.Event.LANGUAGE_SELECTED, $(this).val());
                });
            });
        }
    }

I'm really confused here. Can anyone shed light?

I have tried this as well:

Case#1:

var _this=this;
$(document).ready(function(){
_this.injectHtml.bind(_this);  //Does not work. Everything loads, I get empty page
});

Case#2:

window.onLoad = function(){
this.injectHtml.bind(this);
};

can anyone help?

SandyR
  • 21
  • 3

0 Answers0