Soru Bu javascript tabanlı yazdırma, neden Safari'nin sayfayı yenilemesine neden oluyor?


Üzerinde çalıştığım sayfanın, sayfanın bölümlerini yazdırmak için yürütüldüğü bir javascript işlevi var. Bazı nedenlerden dolayı, Safari'de yazdırma, pencerenin bir şekilde güncellenmesine neden oluyor. Bir şekilde söylerim, çünkü sayfayı yeniden yüklemede olduğu gibi gerçekten yenilenmez, ancak sayfanın başından "görüntülenmesi" başlar, yani en üste kaydır, flash animasyonlar 0'dan başlar, vb.

Etkisi bu keman tarafından çoğaltılır: http://jsfiddle.net/fYmnB/

Yazdırma düğmesine tıklayıp Safari'de bir baskıyı bitirmek veya iptal etmek, ekranın bir saniye boyunca "beyaza gitmesine" neden olur; bu, gerçek web sitemde kendini bir "yeniden yükleme" gibi gösterir. Baskı butonunu çalıştırırken, Firefox, keman sayfasını hiçbir şekilde etkilemeden baskı diyaloğunu açıp kapatır.

Buna neden olan tarayıcıların baskı yöntemini çağırmamın bir yolu var mı, yoksa nasıl açıklanabilir - ve tercihen kaçınılır mı?

P.S .: Gerçek sitemde aynı Chrome ile gerçekleşir. Örnekte, Google Chrome, Safari ile aynı davranışı göstermiyor gibi görünüyor.

Düzenleme: Ayrıca, yazdırma düğmesinin farklı bir etikette olmasını a çapa gibi span veya buttonama bu problemle ilgili bir şey yapmadı.

Düzenleme: Mac OS 10.6.8'de Safari 5.1.2 ile bu soruna giriyorum. Jsfiddle örneğinde, davranış, yazdırma düğmesini tıklattıktan ve yazdırma iletişimini kapatmaktan (yazdırma veya iptal etme) sonra tüm tarayıcıyı kapsayan beyaz bir "titreşim" olarak gösterilir.

Düzenleme: Bu tarayıcı davranışı için hala bir açıklama ararken hala bu soru için bir ödül başlattım. Konuyla ilgili daha fazla ayrıntı vermeye istekli olduğumdan daha fazlasıyım. SO ile ilgili deneyimlerime göre, çevrimiçi sayfalara bağlantılar göndermeniz tavsiye edilmez, ancak problemin çoğaltılması gerçekten zor. Ben yayınlanmış jsfiddle ile yaşadığım "titreşimsiz ve yeniden render" inşallahın aynı problemin sonucu olduğunu düşünüyorum.

Düzenleme: Açıklamalarda açıklandığı gibi, uygulamanın mevcut durumunu içeren yeni bir pencere açıp, ardından bu pencereyi yazdırabilir ve kapatabilir, bir düzeltme olabilir, ancak eldeki sorun için yeterli bir cevap olarak düşünmüyorum.


26
2018-02-13 13:26


Menşei


Deneyin lütfen <a href="javascript:void(0)">print</a>​. WebKit'in, çapa için bu davranışı açıklayacak boş bir href eklediğini tahmin ediyorum. - danwit
Hey Danwit, öneri için teşekkürler. Ne yazık ki, jsfiddle'daki beyaz "yeniden yükleme" titreşimi, gerçek projemde "yenileme" etkisi gibi duruyor. - kontur
Soruyu daha fazla sistem bilgisi ile güncelliyorum. - kontur


Cevaplar:


Bu sorununuzu çözecek mi emin değilim ama son zamanlarda web sayfanızın sadece belirli bir kısmını yazdırmak için çok iyi bir JQuery eklentisi buldum.

Bunu denemelisiniz :) İhtiyaçlarınıza göre özelleştirmeniz için çok güzel parametreler var.

Bir göz at İşte.

Sayfanız neden yenileniyor? İşte benim cevabım bu. window.print () işlevi sayfanızın tüm içeriğini yazdıracaktır. Bu yüzden, sadece sayfanın bir kısmını yazdırmak istediğinizi okuduğumdan, sanırım, sayfadaki tüm istenmeyen içeriği çok kısa bir an için kaldırmak için bir fonksiyon kullanıyorsunuz, o zaman window.print () işlevini çağırıyorsunuz ve bundan sonra tüm orignal içeriği tekrar ekrana getirirsiniz. Bu, sayfanızın yenilenmesi gibi görünen çok kısa bir flaşla sonuçlanır ve tüm flaş parçalarını tekrar yükler.

Dün aynı sorun vardı ve bu jquery eklentisi bana gerçekten yardımcı oldu. Umarım size de yardımcı olur.

İyi günler!


2
2018-03-02 08:30



Bugüne kadar bunun en iyi cevap ve açıklama olduğunu düşünüyorum. İçgüdülerim, gizleme ve yeniden gönderme öğelerinin flaşı yeniden başlatacağından şüphe etmekti, ancak ayrı bir baskı stil sayfası kullanmamın veya bazı öğeleri yazdırmamın ve başkalarının yazdırma şeklini kullanmamın sorunun açıklanmasına neden olabileceğine inanıyorum. Fiili proje web sitesinde eklentiyi test etmemişken, şimdiye kadar yaptığım testler yeterince söz veriyor! Uygulamanın birkaç kez ayarlanması gerekebilir, ancak bunun en kabul edilebilir geçici çözüm olduğunu söyleyebilirim. Cevabınız için teşekkürler. - kontur
Size yardımcı olabileceğime sevindim :) - ThdK
Sadece ekleyerek: Gerçek uygulamada printElement eklentisini uyguladı - çekicilik gibi çalışıyor, tekrar teşekkürler. - kontur


Sorunu çözmenin bir yolunu bulamazsanız, bu şekilde hızlı bir düzeltme elde edebilirsiniz: var win=window.open() bulunduğunuz sayfa sonra win.print() o zaman win.close(). Bu yardımcı olur umarım.


4
2018-02-14 20:06



Merhaba Bogdan, öneri için teşekkürler. Şimdiye kadar, karar, gerçek proje web sitesinde Safari ziyaretlerinin% 10'luk bir payı için böyle bir sistem yapmak değildi, ancak bunun gibi bir çözümü ele aldık. Buradaki problem, sitenin ajax / flash karışımının biraz olması, tam olarak aynı durumdaki bir pencerenin açılmasının fazladan bir işe sebep olacağıdır, bu yüzden kaçınmak istediğim bir şey. :( - kontur


Ne yazık ki benim bir çözümüm yok. ama bunu Safari ve Webkit'te kemanla yeniden üretebildiğim için, en azından gözlemlerimi sunacağımı düşündüm:

  1. Yazdır iletişim düğmesine hemen basarsanız beyazlık olmaz. Beyazı görebilmek için Yazdır düğmesine basmadan önce birkaç saniye beklemeniz gerekir. OSX 10.6.8'de, dönen kumsalın görünümü ile işaretlenen eşiği görüyorum.
  2. Yazdır düğmesine basıldığında fare hareketsiz kaldığında, sayfa beyaz kalır tekrar fareyi hareket ettirene kadar (beachball hala dönüyor).

Umarım bu bir şekilde yardımcı olur.


2
2018-02-21 23:33



Cevabınız için teşekkürler, özellikle gözlemlediklerimi doğrular, 2). Kemanda da fark ettiniz ki, diğer kullanıcılar gerçekten de kemanda deneyimliyorlarsa, gerçek kaynağımın diğer bölümlerine doğru şüphelerimi azaltır. - kontur
Cevabınızı ödülle ödüllendirin. Şimdiye kadar cevapların hiçbiri problemi çözmese de, muhtemelen burada neyin yanlış olduğunu bulmakta yardımcı oluyorsunuz. - kontur
Bugün yazılım güncelleme bildirimimde, ayrıntılarda "Web sayfalarının beyaz renkte yanıp sönmesine neden olabilecek düzeltmeler de dahil olmak üzere" düzeltmeleri de içeren Safari 5.1.2'ye yönelik bir güncelleme fark ettim. Belki aynı konuya atıfta bulunur ... - Petr Vostrel
Konuya ilgi duyduğunuz için teşekkür ederiz. Sadece Safari 5.1.2 ile kontrol ettim ve maalesef sorun hala devam ediyor. - kontur
Sadece kayıt için. Bugün Safari'yi 5.1.2'ye güncelledim ve sorun benim için artık gözlemlenmedi. - Petr Vostrel


Görünüşe göre window.print() olduğu herhangi bir standardın parçası değiltarayıcılar, seçtikleri herhangi bir şekilde uygulamakta serbesttirler.

Görebildiğim tek iş, gerçekten de sayfayı olduğu gibi bırakmak zorunda kalırsanız, başka bir pencere açmak ve bunu yazdırmak olacaktır. Hangisi daha büyük, daha da kötüsü, solucan olabilir.


2
2018-02-22 14:40



İlginç bir gerçektir, ama yine de bu şekilde garip bir insanı buluyorum, normal window.print'in safari olarak adlandırdığı çağrıları buna sebep görünmüyor, ama bir nedenden dolayı, bunu benim yaptığım şekilde uygulamıyorum. - kontur
@kontur "normal" çağrılarla ne kastediyorsunuz - kemanınızdaki çağrı ve başarılı 'normal' bir çağrı hakkında ne farklı? - graphicdivine
Eh, ne demek istediğim Safari ile tarama, aynı zamanda javascript aracılığıyla yazdırma iletişimini çağıran diğer sitelerde benzer sorunlar yaşamadım. Bu nedenle, bu sonuca neden olan Safari'nin uygulanmış varsayılan davranışı olmadığını varsayıyorum (Windows'taki Safari yüklememde konuya benzer şekilde hareket edilmiyor). - kontur


Bunu işlevinizde deneyin:

document.write("<script type='text/javascript'>window.print()</script>");

Bu yığına başvuruyorum:

Window.open'den sonra Mac için Safari'de yazdıramıyorum

Güncelle, dene: 

document.writeln("<script type='text/javascript'>window.print()</script>");

0
2018-02-17 16:37



Bunu pazartesi gününe kadar kontrol edemiyorum, ama hemen deneyeceğim ve sonucunuzu bilmenizi sağlayacağım. - kontur
Tamam, bu yaklaşımı denerken, tarayıcı penceresi yazdırma işlevimi çağırdığında tamamen boş çıkıyor ve basılı belge de boş. - kontur
Bunu deneyin: document.writeln ("<script type = 'text / javascript'> window.print () </ script>"); - Downpour046
Üzgünüz, bu hatayı PC için Safari'de, şu anda test edebileceğim tarayıcıda yeniden oluşturamıyorum. - Downpour046
Kim beni reddetti, lütfen nedenini açıklayın - Downpour046