2016-05-12 13 views
1

Safariブラウザで印刷する際に問題が発生しました。 window.open(url)を使用して、この新しく開かれたURLを印刷しようとすると、空白のページを印刷しようとします。window.open(url).print()がSafariで動作しません

他のほとんどのサイトで提案されているように、私は3000msの遅延を設定しようとしました。同様に、

window.open(url) 
setTimeout(print, 3000); 

これは、新しいタブではなく、以前のウィンドウを印刷しようとします。
印刷する前にwindow.focus()を試してみました。それは助けになりませんでした。あなたは

var popup = window.open(url); 
popup.onload= function(){ 
    // this now refers to `popup` 
    this.print() 
} 

ような何かを行う必要がありますので

答えて

0

まず、setTimeoutメソッドに渡されたWindowオブジェクトは、元のページからです。しかし、あなたがSafariの問題に言及しているので、私は、このように見えることに注意しましょうこのブラウザの通常のドキュメントページ(少なくともHTMLファイルの場合)でのみ動作します。 data:image/...のようなドキュメントについては

は、任意のプロパティを持っていないwindow.open()で返されるWindowオブジェクトので、あなたがpopup.print()メソッドを呼び出すことはできません、(10.9上に少なくとも盗聴のSafari 9.1には、他のバージョンでは試していませんでした)。

自分自身でページを作成する方法の1つは、という希望のURLを持つ<img>タグを追加することです。 これは印刷しようとしているものによって異なります。

var url = 'data:image/png;base64,...'; 

// you have to keep a reference of the new Window 
var popup = window.open(url); 

var tryToPrint = function() { 
    // we have access to the window methods 
    if (popup.print) { 
    // call directly its print method 
    popup.print() 
    } else { 
    // close this one 
    popup.close(); 
    // open a new blank one 
    popup = window.open(''); 
    // create an image 
    var img = popup.document.createElement('img'); 
    // reproduce default Safari's styles 
    img.setAttribute('style', '-webkit-user-select:none; display:block; margin:auto;'); 
    // once the image has loaded, we can print the page 
    img.onload = function() { 
     popup.print() 
    }; 
    popup.document.body.appendChild(img); 
    img.src = url; 

    } 
}; 
// unfortunately, we can't even listen to the load event of the bugged popup 
// so come back to an ugly timeout... 
setTimeout(tryToPrint, 200); 

Live Demo

+0

ケアdownvoteを説明するには? – Kaiido

関連する問題