簡體   English   中英

Chrome:window.print()打印對話框僅在頁面重新加載后打開(javascript)

[英]Chrome: window.print() print dialogue opens only after page reload (javascript)

我面臨一個非常奇怪的問題。 我從一個javascript文件調用window.print()。 這在Safari,IE,Firefox中運行良好......直到兩個小時前它也在Chrome中運行。 (版本29.0.1547.57)

我沒有在我的javascript文件中更改任何必要的內容(實際上 - 我剛剛刪除了一些注釋...),但現在發生的事情真的很奇怪:在Chrome中,當調用window.print()時,打印對話框不會打開。 什么都沒發生。 但是,當我按下重新加載時,打印對話框立即打開。

其他瀏覽器中的行為沒有改變。 在Chrome中進行調試時,我可以看到window.print()按預期調用,然后腳本繼續運行。 在按下重新加載之前,不會顯示打印對話框。

有沒有人經歷過這樣的事情? 我也嘗試在setTimeout()中調用window.print(),但這並沒有改變任何東西。 當我調試要打印的頁面內容時,看起來是完美加載的。

我很遺憾地問,但研究時我沒有找到任何東西。 任何幫助,將不勝感激!

謝謝!

Wasiim是對的,有一個Chrome bug,當DOM中有<video>標簽時, window.print()不起作用。 我通過調用這個函數解決了它:

function printPage() {
    window.print();

    //workaround for Chrome bug - https://code.google.com/p/chromium/issues/detail?id=141633
    if (window.stop) {
        location.reload(); //triggering unload (e.g. reloading the page) makes the print dialog appear
        window.stop(); //immediately stop reloading
    }
    return false;
}

根據我的經驗,這是由於持續的后台流量,例如ajax調用等,阻止Chrome感覺該頁面已完全加載。 重新加載會中斷所有流量,從而彈出打印對話框。 這是Visual Studio 2013中的一個特殊問題,其中BrowserLink在后台不斷剔除。 這可以通過以下設置禁用BrowserLink來測試:

<configuration>
    <appSettings>
        <add key="vs:EnableBrowserLink" value="false"/>
    </appSettings>
</configuration>

我與Chrome完全相同。 您需要手動重新加載頁面:

    <a href="javascript:window.print();window.location.reload()">Print</a> 

如果有人使用帶有chrome的VS2013,這個問題是由BrowserLink功能引起的。

在這里看到答案

Safari中的類似行為。 它是在后台打開的HTTP請求引起的

當任何HTTP請求正在進行時, window.print()會成功執行,但不會打開任何對話框!

您使用長輪詢 (用於服務器推送) ,您將遇到此問題。 因為客戶端已經打開了很長時間的HTTP連接,所以window.print()永遠不會工作。

我非常肯定您遇到了這個問題,因為您的頁面上有一個視頻元素 - 很可能是MP4。

如果您禁用此視頻/或改為使用OGV視頻,則打印應該可以正常工作。 由於Chrome視頻實施的限制,這是Chrome本身的一個錯誤。 同樣重要的是要注意,如果用戶使用ctrl-p / cmd-p手動打印,則打印功能正常

http://code.google.com/p/chromium/issues/detail?id=141633

希望這可以幫助 :)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM