Javascript 重构使用window.open使用DOM而不是write()的函数
我有一个应用程序,它使用Javascript 重构使用window.open使用DOM而不是write()的函数,javascript,dom,web-standards,Javascript,Dom,Web Standards,我有一个应用程序,它使用window.open()生成动态弹出窗口。不幸的是,我在使用标准DOM函数(createElement,appendChild)创建新窗口的内容时遇到了问题,我使用document.write()生成页面 具体来说,我该如何着手: function writePopup() { var popup = window.open("", "popup", "height=400px, width=400px"); var doc = popup.docume
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();
}
函数writePopup()
{
var popup=window.open(“,”popup“,”高度=400px,宽度=400px”);
var doc=popup.document;
文件以(“”)号填写;
文件以(“”)号填写;
文件写入(“写入弹出窗口”);
文件以(“”)号填写;
文件以(“”)号填写;
文件写入(“测试写入””;
文件以(“”)号填写;
文件以(“”)号填写;
doc.close();
}
使用DOM创建相同弹出窗口的函数
<>编辑:我确实考虑过使用一个绝对定位的元素来模拟弹出窗口,虽然看起来更好,但是用户需要能够打印所显示的信息。 为什么不使用一个库函数,而不是重新发明轮子?< /P> [编辑]或
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);
}
是否可以让另一个页面生成动态内容,并将其打开,传递标识您想要生成的内容的参数,而不是尝试写入新窗口?只需进行快速测试,我就可以让doc将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,但它可以工作(显然测试有限)。一次.innerHTML转储应该比无数行document.write()更好 我会根据需要构建DOM并使用
doc.innerHTML = newDOM;
仍然有点粗糙,但比document.write()更好
我已经开始使用document.write()生成页面
我认为,在与DOM交互之前,您可能必须至少使用一些document.write()来放置一个框架页面:
doc.write('<!DOCTYPE ...><html><head></head><body></body></html>');
doc.close();
doc.body.appendChild(...);
doc.write(“”);
doc.close();
文件正文附件子项(…);
在调用write()之前,新窗口的文档处于不确定状态,没有要与之交互的文档。Firefox至少会在您第一次调用document.write()之前放入一个临时的框架文档,但我看不到它实际上在任何地方都有文档记录,所以最好不要依赖它
var popup=window.open(“,”popup“,”高度=400px,宽度=400px”)
窗口中不需要“px”单元。请打开。您可以使用类似
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");
}
函数writePopup(){
var htmlString=[
"",
"",
“书面弹出窗口”,
"",
“测试写入””,
""
].加入(“\n”);
open(“数据:text/html,+encodeURIComponent(htmlString),”_blank,“高度=400px,宽度=400px”);
}
用户需要能够打印弹出窗口的内容,这就排除了使用假弹出窗口的任何内容,例如该模块。打印时,您可以使用CSS隐藏除(div)弹出窗口之外的所有内容。。。一个新的窗口可能更容易,但它仍然可以没有。