9

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.

Community
  • 1
  • 1
jinglesthula
  • 4,446
  • 4
  • 45
  • 79
  • Duplicate of: http://stackoverflow.com/questions/9268840/determine-whether-browser-supports-printing (can't flag because of bounty) – Martin Tournoij Feb 13 '14 at 18:39
  • The answer that (ab)uses the blocking nature of `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 if `window.print()` actually did something... – Martin Tournoij Feb 13 '14 at 18:40
  • 1
    @Carpetsmoker would you mind adding a reference to the duplicate question (and the answer you referred to) as an answer on this question? I'll toss you the bounty and accept your answer if you do, as that's about as 'correct' an answer to a duplicate as I can think of :) – jinglesthula Feb 13 '14 at 20:57
  • Cool, I actually found this on another forum. Should I just delete my answer? seeing as the abuse of negative votes didn't help me at all. I was just trying to help you find a solution, but seeing as you already accepted your own answer, I probably should think twice before I try helping anyone here. – Bobby5193 Feb 13 '14 at 23:06
  • No offence intended, mate. Honestly none of the downvotes for your answer were from me. If someone posts a question and later discovers the answer (even if the answer is "oh, there's a duplicate I didn't notice before") it's appropriate to post that as the answer and, if no one else offers an answer that's more acceptable, to accept one's own answer. Even downvoted answers can provide useful information about the question, so I think it increases the usefulness of SO to not remove it. – jinglesthula Feb 14 '14 at 22:04

2 Answers2

2

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.

Community
  • 1
  • 1
jinglesthula
  • 4,446
  • 4
  • 45
  • 79
0

Updated

Try this:

function supportPrint() {   
     return (typeof(window.print) === 'function');
}
Community
  • 1
  • 1
rahulroy9202
  • 2,730
  • 3
  • 32
  • 45
  • 1
    `return (typeof(window.print)==='function')` – digitalextremist Feb 17 '14 at 13:00
  • 6
    Trying the following code on an iPhone 3G running iOS 4.2.1 yields 'worked': `try { window.print(); alert ('worked'); } catch (e) { alert('exception'); }`. I think on browsers where the window.print does nothing that it is a function but the implementation internally is likely a no-op. If window.print wasn't a function or was undefined, scripts would break. So it has to be there; it just appears there's no good way to see whether it does something useful. – jinglesthula Feb 18 '14 at 15:21