2011-10-04 424 views
13

我有一個在新選項卡或窗口中打開的打印頁面。結果頁面打開一個打印對話框。用戶在打印對話框上進行選擇後,該頁面將關閉選項卡/窗口。Chrome window.print()window.close()導致'print preview failed'。解?

window.print(); 
window.close(); 

這用來工作的主流瀏覽器大,但Chrome瀏覽器的最新版本有一個人違反本(即14.0.835.202)。

我從我認爲是Chrome打印插件收到以下消息:「打印預覽失敗」。

有沒有人有解決方案來打印後關閉Chrome選項卡/窗口?

+0

我也嘗試使用你'得到了處理window.open' – buley

回答

6

我不認爲有任何標準化的打印事件。 IE has a couple,但我意識到這並不能幫助你的Chrome。

我想你可能只剩下兩個選項。手動關閉按鈕或某種形式的延遲使用setTimeout

+2

我以前有到位: window.print(); setTimeout('window.close()',1000); 這用於與Chrome一起使用,但它在最新版本中停止工作。 Chrome報告:「打印不可用,因爲您嘗試打印的頁面已關閉。」 如果有人認爲關閉按鈕是唯一的選擇,請讓我知道!謝謝! – Hoppe

10

這個問題是在谷歌的熱門問題,所以我想我會添加我發現的東西,儘管它不完全反映你的情況。如果你有一個鏈接,調用window.print()然後它的onclick處理程序必須返回false或您收到錯誤。即使鏈接是散列並且無處可逃也是如此!

打印功能不可用,因爲您嘗試打印的頁面已關閉

要解決這個問題請確保您添加返回false的鏈接。

<a href="#" onclick="window.print(); return false;" >Print</a> 

這是解決這個問題的Chromium錯誤。它被標記爲固定爲Chrome 17(尚未公佈),我已經在Chrome 18

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

0

我目前的破解驗證的修補程序。基本上,只是在window.print()之後,我綁定mousemove,單擊並按鍵來觸發我想要的操作(window.close();或window.location.href = somewhere;)。只要用戶確實沒有發生該動作什麼也沒有。但它工作得很好。 (當然,我可以住,直到錯誤被至少校正)

/* 
// alternative to window.print() for dedicated print windows (had issue with <body onload=window.print()... 
// not used anymore. 
$('<a id="aprint" href="#" onclick="return window.print()" class="invisible"></a>').appendTo('body'); 
$('#aprint').trigger('click'); 
*/ 
$('body, select, input, textarea, button, submit, form').prop('disabled', true); 
window.print(); 
setTimeout(function() { 
    $('body').bind('mousemove click keypress', function() { 
     window.location.href=home;      
    }); 
}, 200);  
0

我的解決辦法,以這樣的:

window.print(); 
if(/Chrome/.test(navigator.userAgent)){ 
    $(window).focus(function(){ 
    window.location = '/print-thank-you'; 
    }); 
} else { 
    window.location = '/print-thank-you'; 
} 

編輯:打印在Chrome版本> = 17件作品就像IE/FF,所以請確保你的帳戶也

5

類似的問題,我有。

僅供參考,將其視爲VER 17+ 我用的是jQuery插件,printElement,並找到一種方法來編輯它,所以我可以關閉該窗口,即使在鍍鉻之後......就更新到這個新的打印東西! 我還有一個解決方案。

上一頁

Chrome used to open a seperate window containing just the element i wanted 
printed and its relative css. That window then spawned the .print command 
which opened another window containing print preview. By adding a simple 50 
millisecond timeout i was able to close the previous window without hurting 
the print preview. 

新問題

Chrome no longer opens a new window for their print preview. Instead it 
opens a "dialog with overlay" in the current page to be printed (aka, our 
new blank page containing just the element for print). Thus, when my timer 
kicked in, it wouldn't close the page immediately, but as soon as the dialog 
code closed. The problem was, it closed so fast, the print command never 
made it to its service and thus nothing was printed to pdf 
(what our clinic uses). 

新的解決方案

我知道增加計時器並沒有幫助,罪它會在最後關閉,並且仍然可以停止打印對話框。相反,我添加了一個腳本鏈接到最新的jquery版本到新的about頁面的頁眉,然後將一個懸停添加到要打印的頁面主體。在懸停...關閉!!!並猜測它是什麼...它的功能完美!簡而言之,如果您使用空白頁面進行chrome打印,並且需要在元素/打印的任何內容之後關閉頁面,只需在該頁面的主體上添加一個懸停事件(或在內部html上)關閉窗口。然後,當你選擇一種打印方式並打印時,它將打印並關閉對話框,讓你感到煩人的窗口。只需將鼠標移至scooch和VIOLA!煩人的彈出窗口是GONE!

+1

這是我發現的實際工作的唯一解決方案。榮譽給你,先生。 –

2

這個腳本添加到您的彈出打印窗口print_window_close.js的

<script src="/assets/print_window_close.js" type="text/javascript"></script> 

內容是

jQuery(document).ready(function() { 

    setTimeout(function() { 
     window.close(); 
    }, 1); 

}); 

基本上seTimeout只有當文檔被集中恰好只有當覆蓋叫打印對話框關閉。因此它的工作原理與您想要的完全相同。

+0

它適合我。謝謝。 –

0

的研究和感謝一個下午@ SpYk3HH的回答後,我發現,在版本的作品我目前運行的解決方案:

IE:9.0.8 ...

火狐: 15.01

鉻:23.0.1271.97米

Safari中:5.1.7

當製備HTML被顯示在打印具體p年齡,包括

if (oWindow == null || oWindow.closed || typeof(oWindow) == "undefined") 

檢查,然後通知用戶暫時使用彈出窗口。爲了讓你的頁面打開,顯示打印對話框並關閉在打印對話框中關閉這個功能添加到的onload功能窗口的身體:

function PrintPage() 
{ 
    self.print(); 
    self.onmouseover = (function() { window.close(); } 
} 

這部作品的原因是因爲從根本上,我們仍與處理對象和事件。瀏覽器在某些事情上可能會有不同的表現,但它們都有共同的基礎來尋找。當一個窗口獲得焦點時,一個簡單的onmouseover事件總會有希望發生,所以這個代碼有希望不會失去它的相關性。

30

我剛想出一個適合我的解決方案。我從祕魯的回覆開始,但不想在此解決方案中使用jQuery。

window.onload = function() { 
    window.print(); 
    setTimeout(function(){window.close();}, 1); 
} 

由於某些原因,Chrome不會啓動超時計時器,直到打印對話框關閉。

+0

這個很棒! –

+0

這適用於IE,Chrome和Firefox。我沒有在任何其他瀏覽器上測試。 – jaredbaszler

+0

但是當我在打印預覽對話框之前按ctrl + P。選項卡正在關閉。有沒有解決辦法 –

0

它做工精細,我...

var newWin = window.open('', ''); 
//htmlPage is your html content 
setTimeout(newWin.document.write(htmlPage),1000); 
// newWin.document.body.innerHTML = htmlPage; 
newWin.document.close(); 
newWin.focus(); 
setTimeout(newWin.print(), 10000); 
newWin.document.close(); 
newWin.close(); 
return false; 
3

所有的解決方案上面並沒有解決我的問題,使用此代碼解決我的問題

setTimeout(function() { 
     mywindow.print(); 
     mywindow.close(); 
    }, 1000); 
0

今天試射適用於IE,FF,鉻(including preview fix for chrome)

setTimeout(function() { window.print(); }, 500); 
    window.onfocus = function() { setTimeout(function() { window.close(); }, 500); } 
1

對我來說我找不到解決方案,所以我創建了一個。

我做的是創建一個不可見的文本框,並通過在window.print()被調用後每隔50ms使用setInterval來關注它。我還將onfocus事件綁定到了文本框,當它被觸發時,我關閉了窗口。這是在Chrome,Firefox和Internet Explorer上測試的。

window.print(); 
 
setInterval(function() { 
 
    document.getElementById("focustext").focus(); 
 
}, 50); 
 
document.getElementById("focustext").onfocus = function() { window.close(); }
#focustext { 
 
    border: none; 
 
    height: 0px; 
 
    width: 0px; 
 
}
<input id="focustext" type="text" />

相關問題