Question

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:

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.

Was it helpful?

Solution

This question is indeed a duplicate of Determine whether browser supports printing. See carpetsmoker's comment on this question and the answer referred to. I agree, that may be the best we can do for now.

Even if window.print isn't part of any standard, it'd be nice if browser vendors implemented and agreed upon some API for detection. Perhaps they're all internally working on an appropriate implementation for the function and so don't want to throw out there something temporary that'll be useless later. Oh, well.

OTHER TIPS

Updated

Try this:

function supportPrint() {   
     return (typeof(window.print) === 'function');
}
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top