2014-10-31 12 views
6

Na urządzeniach z Androidem (testowałem Nexusa 5, Nexusa 10, Galaxy S4 i Galaxy Tab 3), polecenie window.print() w JavaScript nic nie robi. O ile wiem, nawet nie rejestruje błędu.Używanie window.print() lub alternatywy na urządzeniach z Androidem

Wiem na pewno, że większość, jeśli nie wszystkie z tych przeglądarek, może drukować, ponieważ można użyć menu telefonu komórkowego Chrome, aby wybrać "Drukuj".

Dlaczego window.print() nie wywołuje zachowania, którego można się spodziewać (otwarcie menu drukowania klientów)? I czy istnieje alternatywa dla Androida do window.print()?

+0

Potrzebujesz aplikacji do drukowania z Androida: https://play.google.com/store/apps/details?id=com.google.android.apps.cloudprint&hl=en –

Odpowiedz

0

Myślę, że metoda direct print() jest domyślnie wyłączona na urządzeniach. Nie widziałem tylu telefonów ani innych urządzeń z Androidem, ale przez USB powinno być oczywiście możliwe.

Zamiast tego zalecane jest zapisywanie zawartości/strony w formacie PDF i drukowanie za pośrednictwem usługi drukowania w chmurze.

+1

Jak już powiedziałem, chrome dla Androida ma w menu opcję "drukuj". To musi być jakoś dostępne z javascriptu, a jeśli chodzi o konwersję do formatu PDF, możesz to rozwinąć. – MarshallOfSound

+0

To prawda. Ale ta opcja jest bardziej przeznaczona do druku w chmurze lub "drukowania do pliku", jak plik pdf lub eps, w którym "bezpośredni" druk może zostać wyłączony. Tutaj znalazłem odpowiedź http://stackoverflow.com/questions/9268840/determine-whether-browser-supports-printing, może być wiele powodów, dla których nie działa ona w większości przeglądarek na urządzeniach mobilnych, ale w rzeczywistości jest po prostu nie zaimplementowane lub wyłączone. Zamiast tego możesz nadal drukować z opcjami udostępniania lub zapisywać jako pdf itp. – Dudeist

3

Jest to wyraźnie określone w niniejszej DocumentationPolecenie jest obsługiwane w systemie iOS, Chrome na Windows i Safari i Chrome na Mac. To nie jest obsługiwane na Androidzie.

Android telefony nie mają natywne wsparcie dla drukowania jeszcze, więc window.print() nie będzie działać. Co oznacza, że ​​do drukowania wymagane jest użycie aplikacji innej firmy. Możesz znaleźć alternatywę w tym article.

+0

Tak, ja zainstalowałem Google Cloud Print App, kiedy kliknę przycisk Google Cloud Print, okno dialogowe otworzy się i wybiorę drukarkę, a następnie kliknij Drukuj nic się nie dzieje. co teraz powinienem zrobić? – Karthi

2

Użyj Google Cloud Print (GCP) - nie jest wymagana żadna aplikacja. Użytkownik musi jednak skonfigurować drukarkę za pośrednictwem protokołu GCP.

tym przykładzie użyto GCP gadget

<html xmlns="http://www.w3.org/1999/xhtml"> 
    <head> 
     <title>Print</title> 
    </head> 
    <body> 
     <div> 
      <p>On android devices (I have tested Nexus 5, Nexus 10, Galaxy S4 and Galaxy Tab 3) the window.print() command in javascript doesn't do anything, as far as I can tell it doesn't even register an error.</p> 
      <p>I know for a fact that most if not all of these browsers can print because you can use mobile chromes menu to choose "print". My questions is, why doesn't window.print() trigger the behavior you would expect (opening the clients print menu). 
      And is there an android alternative to window.print()?</p> 
     </div> 

     <div id="gcpPrint"></div> 

     <script src="https://www.google.com/cloudprint/client/cpgadget.js"> 
     </script> 

     <script> 
      var gadget = new cloudprint.Gadget(); 
      gadget.setPrintButton(cloudprint.Gadget.createDefaultPrintButton("gcpPrint")); 
      gadget.setPrintDocument("text/html", "Print", document.documentElement.innerHTML); 
     </script> 
    </body> 
</html> 
+0

Tak, ja zainstalowałem Google Cloud Print App, kiedy kliknę przycisk Google Cloud Print, okno dialogowe otworzy się i wybiorę drukarkę, a następnie kliknij Drukuj nic się nie dzieje. co teraz powinienem zrobić? – Karthi

2

pracuję na simular problem i wymyślił tego rozwiązania:

$(document).ready(function($) { 
 
    var ua = navigator.userAgent.toLowerCase(); 
 
    var isAndroid = ua.indexOf("android") > -1; //&& ua.indexOf("mobile"); 
 

 
    $('button.print').click(function(e) { 
 
    e.preventDefault(); 
 
    if (isAndroid) { 
 
     // https://developers.google.com/cloud-print/docs/gadget 
 
     var gadget = new cloudprint.Gadget(); 
 
     gadget.setPrintDocument("url", $('title').html(), window.location.href, "utf-8"); 
 
     gadget.openPrintDialog(); 
 
    } else { 
 
     window.print(); 
 
    } 
 
    return false; 
 
    }); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script> 
 
<button class="print">Print this page</button>

nie miałem czasu aby sprawdzić, czy to działa, nie mam w tym momencie urządzenia z Androidem. Chciałbym mieć jakąś opinię na ten temat ;-)

+0

To jest dobre rozwiązanie, w zasadzie mniej więcej to, co poszło z końcem, ale moim głównym zmartwieniem było to, że mogę zrobić odpowiednik pliku -> Drukuj na moim urządzeniu z Androidem (przycisk Menu -> Drukuj), ale nie mogę wyzwolić to za pomocą semi-standardowej funkcji 'window.print()' – MarshallOfSound

+0

Nie mogłem znaleźć polecenia Print w Chrome android. Mogę znaleźć udział ...> Drukarka. – Dave

+0

Nie udało mi się znaleźć łańcucha znaków "mobile" w żadnym ciągu znaków agenta użytkownika. Kłopot w tym, że czasami przeglądarka internetowa na urządzeniu mobilnym może emulować tryb pulpitu, więc ciąg znaków 'android' nie pojawia się. Nie można przetestować za pomocą przeglądarki internetowej _Google Chrome_, ponieważ nie działa ona prawidłowo. Ciąg znaków "android" pojawił się na urządzeniu mobilnym podczas korzystania z przeglądarki internetowej _Firefox_ i przeglądarki internetowej _web Browser_ dokonanej przez _Litter Penguin_. –

0

W tej chwili funkcja window.print() działa idealnie na moim urządzeniu z Androidem 5.0.1 zarówno w przeglądarce Chrome, jak i domyślnej.

+1

Próbowałem z andriod 7. window.print() nie robi nic. w milczeniu ignorowane. – Dave

0

Teraz window.print() działa na urządzeniach z systemem Android.

Powiązane problemy