I have a page with a list of links and a div which serves as a placeholder for the pages the links lead to. Everytime user clicks on a link an iframe is created in the div and its src attribute gets the value of the link href attribute - simple and clear, sort of external web pages gallery. What i do have a problem with is printing the contents of the iframe. To do this i use this code:
function PrintIframe() { frames["name"].focus(); frames["name"].print(); }
The issue seems to be that iframe is created dynamically by JQuery - when I insert an iframe right into the html code, the browser prints the external page all right. But with the same code injected by JavaScript nothing happens. I tried to use JQ 1.3 'live' event on "Print" link, no success. Is there a way to overcome this?
I've had an issue with printing iframe's content. In order to achive this, use code below:
For example you have iframe:
Then js to print iframe's content call this function (works both in ie and other browsers):
Function's code:
Maybe the same-domain restriction prevents your JavaScript from executing. The same-domain restriction allows JavaScript in frame A (or the main window) to interact (such as .print()) with frame B if A and B are from the same domain. Check your JavaScript error console. If you get something like a security exception / permission error, then it is most probably because of the same-domain restriction.
I tried this and was able to replicate the issue. What i noticed was that when calling the print function the iframe hadn't completed loaded. i tested this by checking the value of innerHTML when calling PrintIFrame(). To overcome this, you can use setTimeOut to call the function again x milliseconds later:
This worked for me
EDIT Strange - i had an alert in my test code which seems to make it work. When i took it out, it didn't work. Sorry :(
Anyway, this should do it using jQuery to attach a load event handler to the iframe. I have tested on IE8 and it works:
Hmm do I get this right? You only need to change the source of where the IFrame leads to?
I know this is a pretty old thread but I have a more rubust solution for this.
It's based on https://stackoverflow.com/a/9648159/3183069 and https://stackoverflow.com/a/831547/3183069
I added .one() function so it doesnt loop infinitely if you cancel the print! I also load the iframe once. Enjoy
Suppose that this is what your iframe looks like:
This is how you do it using jQuery:
and this is how you do it using native JavaScript: