我知道調用瀏覽器的「打印」對話框中的兩個方法(我使用的搜索,當然):打印(的一部分)的網頁使用Javascript
- document.print()
- document.execCommand('print',false,null)
他們之間有什麼區別?支持跨瀏覽器?論文,文檔或標準?哪個更正確的使用?
另一個問題:什麼是最直接的方式來打印給定的網頁部分?我知道我們可以創建新窗口或iframe來調用上面兩種打印方法中的任何一種。哪一個有較少的陷阱?
我知道調用瀏覽器的「打印」對話框中的兩個方法(我使用的搜索,當然):打印(的一部分)的網頁使用Javascript
他們之間有什麼區別?支持跨瀏覽器?論文,文檔或標準?哪個更正確的使用?
另一個問題:什麼是最直接的方式來打印給定的網頁部分?我知道我們可以創建新窗口或iframe來調用上面兩種打印方法中的任何一種。哪一個有較少的陷阱?
我測試過的打印跨瀏覽網頁的一部分不同的方式: 瀏覽器,火狐,歌劇(12和新的),IE11,10,9和8我試圖創造新的window
,新iframe
,或在頁面上使用existing iframe
。然後嘗試.print()
和.execCommand('print')
。
注:請記住,.PRINT()調用窗口,並.execCommand()調用文件。用於測試
代碼可以發現here
糾正我,如果我的測試代碼是錯誤的,我只是想找個做這個工作最清晰的方式。我的結論:
print()
I幀和窗口,除了當前窗口(?)。documents
上調用print()
內部iframe或IE中創建的窗口在當前document
上打破print()
。小心!print()
。execCommand('print')
幾乎可以在任何地方以任何方式工作(iframe,窗口)。儘管它不支持Firefox。execCommand()
回報false
如果呼叫不成功,所以如果你不想使用插件和魔術,創建窗口或iframe,請撥打execCommand('print')
如果返回false
,叫print()
。一件事:
創建iframe
是棘手:您無法直接訪問其窗口或文件(是的,你有ContentDocument屬性,跨瀏覽器的行爲不同)。你應該名稱它,然後撥打window.frames[name]
得到窗口對象從該iframe。不要嘗試撥打window.frames(id)
- 它會返回iframe。
在Android瀏覽器上,'window [iframeName] .document.execCommand('print')似乎打印整個頁面。你見過嗎? – 2016-02-03 11:48:41
請注意,根據http://caniuse.com/#feat=document-exec命令,Android 5-6(Lollipop-Marshmallow)不支持此功能。 – 2016-02-03 11:58:58
@torazaburo不,我的興趣只是桌面上的交叉。 – Rast
,在接受的答案提到的最後一個方法,那麼,最終看起來像這樣:
iframe = document.getElementById('iframe-id');
var printed = iframe.contentWindow.document.execCommand('print', false, null);
if (!printed) window.print();
替代:
try {
iframe = document.getElementById('iframe-id');
iframe.contentWindow.document.execCommand('print', false, null);
}
catch(e) {
window.print();
}
通過printThis使用類似的方法
if (document.queryCommandSupported("print")) {
$iframe[0].contentWindow.print(); $iframe[0].contentWindow.document.execCommand("print", false, null);
} else {
$iframe[0].contentWindow.focus();
$iframe[0].contentWindow.print();
}
你可以使用window.open和execComand的組合(saveas 例如:
<script type= "text/javascript">
function saveas() {
var oPrntWin = window.open("","_blank","width=1,height=1,left=1,top=1,menubar=yes,toolbar=yes,resizable=yes,location=no,scrollbars=yes");
oPrntWin.document.open();
oPrntWin.document.write(editeur.innerHTML);
oPrntWin .document.execCommand("SaveAs",true,"C:\\My Documents\\Saved Content.html");
oPrntWin.document.close();
}
</script>
editeur.html是我的文檔的一部分 你可以爲你的框架 做相同的替換書面方式由物業「SRC」爲體
這個問題是關於發送一個頁面到打印機,而不是保存爲一個文件 – Rast
一個新窗口在大多數情況下,您可以使用document.print()。查看document.execCommand的文檔:https://developer.mozilla.org/en-US/docs/Web/API/document.execCommand –
@ HarveyA.Ramer鏈接不會記錄任何'print'命令。 – 2016-02-03 11:46:59
@torazaburo這裏有一個很好的GitHub打印可能性,包括execCommand('print')的例子:https://gist.github.com/Rast1234/8598949它看起來像使用這個jQuery插件:https:/ /github.com/jasonday/printThis –