Question
Is there any way to detect support for window.print()? I'd prefer to detect the feature itself vs trying to go down the rabbit hole of detecting whether I'm on a mobile browser or desktop or iOS or Android or which particular mobile browser I might be on.
Background
The following links lead me to believe that:
- Apple requires all 3rd party browsers to use UIWebView
- UIWebView as used in non-Safari apps does nothing when you run window.print()
- Safari on iOS does something appropriate when you run window.print()
The links:
- https://productforums.google.com/forum/#!topic/chrome/7wTj1dteSeI
- Javascript printing on mobile devices(ios)
- https://mcmap.net/q/1320260/-ios-4-2-uiwebview-javascript-window-print-doesn-180-t-print-not-launch-before-and-after-events
- http://daringfireball.net/linked/2012/06/28/chrome-ios
- https://mcmap.net/q/1320260/-ios-4-2-uiwebview-javascript-window-print-doesn-180-t-print-not-launch-before-and-after-events
P.S. I looked in the Modernizr docs to see if it can detect support for printing, but didn't spot anything.
P.P.S. I see that Chrome for iOS does support printing, albeit through GCP. Here, just looking for feature detection rather than a print solution. (https://support.google.com/chrome/answer/3049815?hl=en&ref_topic=1719889)
Edit To clarify, it appears that window.print is not part of any standard: https://developer.mozilla.org/en-US/docs/Web/API/Window.print. If window.print exists in some browsers but doesn't do anything useful (e.g., isn't wired up to any browser-specific implementation of appropriate printing functionality) that is ultimately what I want to detect.
My guess is that mobile browser vendors will have something defined for window.print so that any scripts that try to call it won't error; but the call may be a No op, or may send a request the the operating system that the OS simply ignores.
The more I think about how the guts of this could be working the less hopeful I am of a simple JavaScript approach to detecting the feature, which is too bad.
print()
is your best guess. I had the same idea, can't think of anything better. It doesn't actually detect support though, it just tells you ifwindow.print()
actually did something... – Wisconsin