Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/465.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 重构使用window.open使用DOM而不是write()的函数_Javascript_Dom_Web Standards - Fatal编程技术网

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)弹出窗口之外的所有内容。。。一个新的窗口可能更容易,但它仍然可以没有。