2

メインウィンドウのごく一部を印刷可能なバージョンでポップアップウィンドウを生成しようとしています。Meteorを使用しているので、HTMLファイルとCSSファイルはすべてプログラムで生成されます。

私がやりたいのは、Javascriptを使用して、親ウィンドウでリンクされているすべてのCSSファイルを読み取り、それらを子ウィンドウに追加することです。

var childWindow = window.open("", "_blank", "width=350,height=150");
var childDoc    = childWindow.document;
var childHead   = childDoc.getElementsByTagName("head")[0];

$('link').each(function(index,element){
  childLink = childDoc.createElement("link");
  childLink.rel  = "stylesheet";
  childLink.href = element.href;
  childHead.appendChild(childLink);
});
childDoc.write(myHtml);

しかし、それは機能していません。childHead子ではなく、親ドキュメントのヘッドを参照しているようです。これが私が悪意を持って実行しているセキュリティの問題なのか、それともコードに間違いがあるのか​​はわかりません。

私が間違っていることについて何か考えはありますか?

4

2 に答える 2

1

私は自分のページの1つで非常によく似たことをしています。「親」ページを使用してすべてを記述し、正常に機能します。これが私にとってどのように機能するかです。このフィドルの動作をご覧ください。printMedivからのものだけを出力することに気付くでしょう。また、印刷されたページには、親ページとまったく同じスクリプトとスタイルがあります。

some stuff NOT to print
<div id="printMe" class="ui-selectable-helper">
    I should be printed, but not the other stuff.
</div>
more stuff NOT to print

$(function(){
    var printWindow = window.open('', 'printWin', 'height=600, width=900, toolbar=no, menubar=no, scrollbars=no, resizable=no, location=no, directories=no, status=no');

    //create a new HEAD with the exact same content as the main page
    var writeMe = ('<body><head>' + $('head').html() + '</head><html>');

    //grab the content of the printMe div and use it on the print page
    writeMe += ("<div>" + $('#printMe')[0].outerHTML + "</div>");
    writeMe += ('</html></body>');    
    printWindow.document.write(writeMe);
    printWindow.document.close();    
    printWindow.focus();
    printWindow.print();  

    //you might even use this next line if you want the 'popup' window to go away as soon as they have finished printing.
    //printWindow.close();
});

注:class="ui-selectable-helper"CSSページが新しいポップアップウィンドウに正しく転送されていることを示すために、を使用しています。

于 2013-02-18T17:27:32.593 に答える
0

私のために働いたのは、体に何かを追加することでしたchildDoc.write(myHtml);

これ以前は、CSSはロードされませんでしたが、実際にいくつかのdivを渡すと、CSSは他の変更なしで表示されました。

于 2013-02-18T20:05:38.080 に答える