2

window.open()動的ポップアップを生成するために使用するアプリケーションがあります。残念ながら、標準の DOM 関数 ( createElement、 ) を使用して新しいウィンドウのコンテンツを作成するのに問題があり、ページを生成するappendChildために使用しました。document.write()

具体的には、これからどうすればいいですか:

function writePopup()
{
    var popup = window.open("", "popup", "height=400px, width=400px");
    var doc = popup.document;
    doc.write("<html>");
    doc.write("<head>");
    doc.write("<title>Written Popup</title>");
    doc.write("</head>");
    doc.write("<body>");
    doc.write("<p>Testing Write</p>");
    doc.write("</body>");
    doc.write("</html>");
    doc.close();
}

DOM を使用して同じポップアップを作成する関数に?

編集:ポップアップをシミュレートするために絶対配置要素を使用することを検討しましたが、見栄えは良くなりますが、ユーザーは表示されている情報を印刷できる必要があります。

4

6 に答える 6

2

簡単なテストを行うだけで、次のようにDOMで作成されたHTMLをポップアップに追加するドキュメントを取得できます。

var popup = window.open("", "popup", "height=400px, width=400px"); 
var doc = popup.document.documentElement;
var p = document.createElement("p"); 
p.innerHTML = "blah"; 
doc.appendChild(p);

私の例では、私が知っている完全に無効なHTMLが生成されますが、機能します(明らかに限られたテストで)。

于 2008-11-05T15:38:54.523 に答える
2

.innerHTMLの1つのダンプは、無数行のdocument.write()よりもパフォーマンスが優れているはずです。

必要に応じてDOMを構築し、

doc.innerHTML = newDOM;

まだちょっとハッキーですが、document.write()よりも優れています。

于 2008-11-05T15:45:41.017 に答える
2

document.write() を使用してページを生成しました。

DOM を操作する前に、少なくとも一部の document.write() を使用してスケルトン ページを配置する必要があると思います。

doc.write('<!DOCTYPE ...><html><head></head><body></body></html>');
doc.close();
doc.body.appendChild(...);

write() が呼び出される前は、新しいウィンドウのドキュメントは不確定な状態にあり、対話するドキュメントはまだありません。Firefox は、最初に document.write() を呼び出すまで、少なくとも一時的なスケルトン ドキュメントを配置しますが、これが実際にどこにも文書化されていることを確認できないため、おそらく依存しないことをお勧めします。

var popup = window.open("", "popup", "height=400px, width=400px");

window.open に「px」単位は必要ありません。

于 2009-02-12T14:24:12.613 に答える
1

車輪を再発明する代わりに、http://plugins.jquery.com/project/modaldialogなどのライブラリ関数を使用してみません か?

[編集者

function writePopup(){
    var popup = window.open("", "_blank", "height=400px, width=400px");
    var doc = popup.document;
    doc.title = 'Written Popup';

    var p = doc.createElement('p');
    p.innerHTML = 'Testing Write';
    doc.body.appendChild(p);
}
于 2008-11-05T15:07:34.040 に答える
0

次のようなものを使用できます

function writePopup(){
  var htmlString=[
    "<html>",
    "<head>",
    "<title>Written popup</title>",
    "</head><body>",
    "<p>Testing write</p>",
    "</body></html>"
  ].join("\n");
  window.open("data:text/html,"+encodeURIComponent(htmlString), "_blank", "height=400px, width=400px");
}
于 2010-10-25T05:49:31.237 に答える
0

新しいウィンドウに書き込もうとする代わりに、動的コンテンツを生成する別のページを作成し、それを開いて、生成したいコンテンツを識別する引数を渡すことは可能でしょうか?

于 2008-11-05T15:08:56.050 に答える