2012-02-13 33 views
26

我正在處理的頁面執行了一個JavaScript函數來打印部分頁面。 由於某些原因,在Safari中打印會導致窗口以某種方式更新。我以某種方式說,因爲它不會像重新加載頁面那樣真正刷新,而是它從頭開始「渲染」頁面,即滾動到頂部,閃存動畫從0開始,依此類推。爲什麼這個基於javascript的打印會導致Safari刷新頁面?

效果通過這個小提琴轉載:http://jsfiddle.net/fYmnB/

點擊打印按鈕,完成或取消在Safari打印導致屏幕「去白」一秒鐘,這在我真正的網站表現的東西「喜歡」重新加載。比方說,在運行打印按鈕的時候,Firefox可以打開和關閉打印對話框,而不會以任何方式影響小提琴頁面。

是否有我的調用瀏覽器打印方法導致這種情況的方式,或者如何解釋 - 並最好避免?

P.S .:在我的真實網站上,Chrome也一樣。儘管如此,Chrome瀏覽器似乎並沒有顯示出與Safari相同的行爲。

編輯:我也試着在a錨點的標籤上打印不同的標籤,例如spanbutton,但這並沒有幫助解決問題。

編輯:我遇到了這個問題與Safari 5.1.2在Mac OS 10.6.8。在jsfiddle示例中,行爲顯示爲單擊打印按鈕並關閉(打印或中止)打印對話框後覆蓋整個瀏覽器的白色「閃爍」。

編輯:剛開始這個問題的賞金,因爲我仍然在尋找這個瀏覽器行爲的解釋。我非常願意提供有關這個問題的更多細節。根據我的經驗,不建議將鏈接發佈到在線頁面,但是我覺得這個問題很難再現。我認爲「閃爍&重新呈現」我與張貼的jsfiddle的經驗有希望是同樣的問題的結果。

編輯:正如評論中所述,打開一個包含應用程序當前狀態的新窗口,然後打印並關閉該窗口,可能是一個解決辦法,但我認爲這不足以解決問題的答案。手。

+0

請嘗試'print'。我猜WebKit會爲你的錨添加一個空href來解釋這種行爲。 – danwit 2012-02-13 14:07:00

+0

嗨丹維特,謝謝你的建議。不幸的是,jsfiddle中的白色「重新加載」閃爍仍然存在,就像我實際項目中的「刷新」效果一樣。 – kontur 2012-02-14 07:23:14

+0

我用更多的系統細節更新了這個問題。 – kontur 2012-02-14 10:42:11

回答

2

我不確定這是否會解決您的問題,但我最近發現一個非常好的Jquery插件只能打印您網頁的某個部分。

你應該試一試:)它有一些非常酷的參數來定製它,以滿足您的需求。

看一看here

爲什麼頁面刷新?這是我的回答。 window.print()函數將打印頁面的全部內容。因此,由於我讀到的只是想打印頁面的一部分,我猜你正在使用一些函數在頁面中刪除所有不需要的內容,然後調用window.print()函數,之後你把所有的orignal內容再次放在屏幕上。這會導致非常短暫的閃光,看起來您的頁面正在刷新,並會再次加載所有閃存部分。

昨天我有同樣的問題,這jQuery插件真的幫了我。我希望它也能幫助你。

有一個愉快的一天!

+0

到目前爲止,我相信這是最好的答案和解釋。我的直覺是懷疑隱藏和重現元素會重新啓動閃光燈,但我相信我使用單獨的打印樣式表或者我有某些元素打印和其他元素的方式不會以您描述的方式導致問題。雖然我沒有在實際的項目網站上測試該插件,但迄今爲止我的測試似乎已經足夠讓人滿意!實施可能需要一些調整,但我會說這是最可接受的解決方法。感謝您的回答。 – kontur 2012-03-02 21:26:19

+0

我很高興我可以幫你在這裏:) – ThdK 2012-03-03 17:06:04

+0

只需添加:在實際應用中實現了printElement插件 - 像魅力一樣工作,再次感謝。 – kontur 2012-03-06 11:43:34

4

如果你找不出辦法解決,你可能會得到一個快速解決這樣的問題: var win=window.open()在同一頁你在 然後win.print(),然後win.close()。希望這可以幫助。

+0

嗨Bogdan,謝謝你的建議。到目前爲止,這個決定並不是要在實際項目網站上爲Safari瀏覽器訪問量的10%製作一個這樣的系統,但我們已經討論過這樣的解決方案。這裏的問題是這個網站有點像ajax/flash混合,打開一個完全相同狀態的窗口會導致一些額外的工作,所以這是我想避免的。 :( – kontur 2012-02-15 13:07:56

0

試試這個在您的功能:

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

我引用這個堆棧:

After window.open, can't print in Safari for Mac

更新,請嘗試:

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

直到星期一才能檢查,但我會立即嘗試,並讓您知道結果 – kontur 2012-02-19 07:02:02

+0

好的,嘗試這種方法時,瀏覽器窗口在調用我的打印功能時完全空白,並且打印文檔爲空 – kontur 2012-02-20 14:38:05

+0

試試這個:document.writeln(「」); – Downpour046 2012-02-20 15:09:07

2

可悲的是,我不沒有解決辦法。但因爲我是能夠重現這在Safari和Webkit與小提琴,我想我至少會提供我的意見:

  1. 如果你打打印對話框按鈕就白出不會發生。您需要等待幾秒鐘才能點擊Print來查看白色。在OSX 10.6.8上,我看到了旋轉沙灘球出現的標誌。
  2. 當鼠標自打印按鈕點擊後保持靜止時,頁面保持白色,直到您再次移動鼠標(沙灘球仍在旋轉)。

希望這會有所幫助。

+0

感謝您的回答,它證實了我觀察到的情況,特別是2) 。好的是,您還會在小提琴上注意到這一點 - 這會減少我對我的真實應用程序的其他部分的懷疑,作爲錯誤的來源,如果其他用戶確實也在小提琴中體驗過。 – kontur 2012-02-22 08:40:58

+0

獎勵您的答案。雖然迄今爲止沒有任何答案能夠解決問題,但您可能最有幫助的是找出這裏出了什麼問題。 – kontur 2012-02-24 08:49:23

+0

今天在我的軟件更新通知中,我注意到Safari 5.1.2的更新,其中詳細說明:「...包括修復(那)解決可能導致網頁閃爍白色的問題」。也許它是指相同的問題... – 2012-03-01 21:29:18

2

因爲它似乎window.print()not part of any standard,瀏覽器可以自由選擇任何方式實現它。

我能看到的唯一解決方法就是打開另一個窗口並打印出來,如果您真的必須離開頁面。這是另一個可能更糟糕的蠕蟲病毒。

+0

有趣的事實知道,但我仍然以這種方式找到bevaviour奇怪,正常的window.print在Safari瀏覽器調用似乎並沒有造成這種情況,但由於某種原因,以我的方式實現它,確實如此。 – kontur 2012-02-22 15:20:10

+0

@kontur你的意思是「正常」的電話 - 你的小提琴中的電話有什麼不同,以及一個成功的「正常」電話? – graphicdivine 2012-02-22 15:35:35

+0

那麼,我的意思是用Safari瀏覽器,我從來沒有經歷過類似的問題在其他網站,也通過JavaScript調用打印對話框。因此,我認爲這不是Safari實現的默認行爲,導致了這種結果(我的Windows安裝Safari也沒有像主題中描述的那樣運行)。 – kontur 2012-02-22 20:00:35

相關問題