[Webkit-unassigned] [Bug 200261] New: iframe printing works in desktop Safari, but not mobile...

bugzilla-daemon at webkit.org bugzilla-daemon at webkit.org
Mon Jul 29 17:56:47 PDT 2019


            Bug ID: 200261
           Summary: iframe printing works in desktop Safari, but not
           Product: WebKit
           Version: Safari 12
          Hardware: iPhone / iPad
                OS: Unspecified
            Status: NEW
          Severity: Major
          Priority: P2
         Component: Printing
          Assignee: webkit-unassigned at lists.webkit.org
          Reporter: l.mazz at verizon.net

Created attachment 375132

  --> https://bugs.webkit.org/attachment.cgi?id=375132&action=review

Instructions to replicate this bad behavior

Once again, I've hit a wall with iOS printing after getting desktop Safari to work.
The overall approach:
    - load some css in <head>
    - load some HTML in <body>
    - call contentWindow.print()

Here's the code:

            //"Print" search results on item list (inventory) page
            //        SAFARI VERSION DEPENDENT - assumes "sVersion" has correct Safari version
            $('#itemList .toolbar .printButton').live('click', function(event) {
                // Expand any telescoped items
//                $('#itemList #resultsBody ul li[id^="t"]').each(function() {
//                    alert("opening "+ $(this).attr("id") );
//                   $(this).find('.tsIcon').trigger('click');
//                });

                if (sVersion > "5.0.6")
                    if ($('iframe').html() != null) $('iframe').remove();       // newer Safaris require this done here

                var iframe = document.createElement("iframe");                  // create an iframe so that no window pops up
                document.body.appendChild(iframe);                              // insert the element to the DOM

                // include a stylesheet for printing this stuff
                headHTML  = "<link rel='stylesheet' href='css/rPrint.css'>";

                var frame = $('iFrame #document');
                var contents = frame.contents();
                var body = contents.find('body');
                var head = contents.find('head');

                iframe.contentDocument.write(headHTML);                         // write stylesheet link
                iframe.contentDocument.write(vendorName);                       // write header
                today = new Date();
                dd = String(today.getDate()).padStart(2, '0');
                mm = String(today.getMonth() + 1).padStart(2, '0'); //January is 0!
                yyyy = today.getFullYear();
                today = mm + '/' + dd + '/' + yyyy;
                iframe.contentDocument.write(" - "+today);
                iframe.contentDocument.write("<span class='tm'>Made with <i>ShipIt</i>™</span><br>");
                iframe.contentDocument.write(vuName+', '+vuPhone+"<br>");
                if (vuEmail != "(none)")

                // Only display checked items
                $('#itemListStatus #resultsBody ul li input:checked').each(function() {
                    $(this).attr("checked", "checked");
                $('#itemListStatus #resultsBody ul li input:not(:checked)').each(function() {
                var clone = $('#itemListStatus').clone();                       // don't trash the screen
                srCount = $(clone).find('#resultsHead #srCount').text();
                $(clone).find('#resultsBody ul li input:not(:checked)').each(function() {
                    $(this).parent().css("display", "none");
                $(clone).find('#resultsHead #srCount').text(srCount);

                iframe.contentDocument.write($(clone).html());                  // write the results HTML to be printed

                iframe.contentWindow.print();                                   // print it
                if (sVersion <= "5.0.6")
                    $('iframe').remove();                                       // older Safaris get this done here, where it should be
                return true;

The attachment lets you access the web app to experience correct behavior in desktop Safari, 
and the non-behavior in iOS.  As an aside, Chrome is spotty - sometimes this code will work,
other times you have to repeatedly hit "Print" to get the css rules to be applied.  Clue?

Any help appreciated on this one.

You are receiving this mail because:
You are the assignee for the bug.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.webkit.org/pipermail/webkit-unassigned/attachments/20190730/99b9c54a/attachment-0001.html>

More information about the webkit-unassigned mailing list