2016-04-16 21 views
3

我知道您可以在javascript中打開一個新選項卡,並隨後關閉它,如果您按照this SO問題保留對其的引用。從網頁打印後用javascript關閉選項卡

就我而言,我想打開一個新的選項卡,其中包含一個腳本,該腳本會自動觸發瀏覽器的打印對話框。一旦打印對話框被取消,我希望新標籤消失。由於新頁面中的腳本不是創建該頁面的腳本,因此它們無法關閉它。

有沒有辦法檢測何時打印對話框被解散,以便創建新選項卡的腳本知道什麼時候關閉它?什麼我試圖完成

例子:

var printTab; 
$('#print_me').on('click', null, function() { 
    printTab = window.open($('#print_me').data('target'), "_blank"); 
    printTab.focus(); 
}); 

function closePrintTab() { 
    printTab.close(); 
} 

/* Here is the sketchy part; what triggers a call to closePrintTab? */ 
+0

? –

+0

這可能會幫助你:http://nikackoverflow.com/questions/6460630/close-window-automatically-after-printing-dialog-closes – nikoskip

+0

@nikoskip:我已經嘗試了幾種方法。我遇到的問題是現代瀏覽器現在只允許腳本關閉窗口,如果該腳本是首先打開窗口的話。從答案中得出的最後一個解決方案存在一些問題,如果您認爲瀏覽器似乎在積極嘗試阻止這類問題,那麼這種解決方案並不是一個好的長期解決方案。 – Adam

回答

0

在我的情況,我想打開一個新的標籤,其中包含一個腳本,自動觸發瀏覽器的打印對話框。一旦打印對話框被取消,我希望新標籤消失。由於新頁面中的腳本不是創建該頁面的腳本,因此它們無法關閉它。

因此,從我所能理解的是,您在新標籤頁中觸發了一個對話框,並且一旦該對話框關閉,您希望關閉該標籤頁。

假設你有過對話解僱事件控制,你可以在其中這家新開業標籤內寫入對話框解僱事件處理程序關閉使用window.close();此窗口。

和評論這一說法

由於在新頁面中的腳本並沒有什麼創建的頁面,他們沒有關閉它的能力。

是的你是對的,但是你可以關閉當前選項卡中的腳本。這就是當使用window.close();時。關閉當前窗口。

希望這是有幫助的。

+0

我試圖在新選項卡中加載的頁面中使用'window.close()',Chrome向我發出這樣的警告:「腳本可能只關閉由它打開的窗口。」如果您希望關閉新標籤(至少在Chrome中),則必須使用打開該標籤的同一腳本完成。 – Adam

0

我在這種情況下的解決方案是使用HTML5 localStorage工具。在與打印按鈕的頁面:

localStorage.removeItem('printFinished'); 
var printWindow = window.open('/path/to/print/', "_blank"); 
window.addEventListener('storage', function(event) { 
    if(event.key == "printFinished") { 
     printTab.close(); 
    } 
}, false); 

這裏的要點是localStorage無限期持續。每次清除目標變量都會確保我們不會與以前會話中的任何內容進行交互。接下來,我們需要確保我們只對我們感興趣的項目進行更改。

...而在新標籤的代碼被點擊了打印按鈕時打開:

window.onLoad = function() { 
    window.print(); 
    localStorage.setItem('printFinished', true); 
} 

我測試了Chrome和火狐以上沒有任何問題。雖然我不能擔保IE/Edge,Safari或Opera,但對其他人可能在這些瀏覽器中獲得的結果非常感興趣。

如果您使用sessionStorage而不是按照this SO問題的答案,以上方法將不起作用。

0

你可以嘗試這樣的事情:

function closeThisWindow() { 
     var win = window.open('', '_self'); 
     window.close(); // works for i.e. 
     win.close(); //works for chrome 
     return false; 
} 
要關閉標籤,一旦你開始打印