重构使用window.open而不是write()的函数以使用DOM
Refactoring a function that uses window.open to use the DOM rather than write()
我有一个使用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创建相同弹出窗口的函数?
编辑:我确实考虑过使用一个绝对定位的元素来模拟弹出窗口,尽管它看起来更好,但用户需要能够打印显示的信息。
只需进行快速测试,我就可以让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()来生成页面。
我认为您可能至少需要使用一些document.write()来放置一个框架页面,然后才能与DOM:交互
doc.write('<!DOCTYPE ...><html><head></head><body></body></html>');
doc.close();
doc.body.appendChild(...);
在调用write()之前,新窗口的文档处于不确定状态,没有文档可与之交互。在你第一次调用document.write()之前,Firefox至少会放一个临时的框架文档,但我看不出它实际上在任何地方都有文档,所以最好不要依赖它。
var popup=window.open(","popup","height=400px,width=400px");
window.open.
为什么不使用库函数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);
}
是否可以有另一个生成动态内容的页面,并将其打开,传递标识您想要生成的内容的参数,而不是尝试写入新窗口?
您可以使用类似的东西
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");
}
- 如何在DOM元素上按类型构建此函数
- 在Angular中呈现DOM对象时,如何调用控制器中指定的函数
- 如何检查DOM节点是否继承自构造函数
- 在DOM加载时触发函数
- 使用promise通过外部函数从DOM中检索属性
- 直接在DOM事件处理程序中调用作用域函数的最短方法是什么
- 在 dom 完成加载 durandal 后调用函数
- 如何在构造函数中创建一个简单的DOM元素,并在调用时将其附加到元素中
- "撤消”;Javascript中的DOM操作函数
- DOM:如何根据迭代器值设置元素宽度并在mouseover上调用函数
- 向一个jQuery/DOM元素添加一个函数
- 为什么jQuery选择器函数与原生DOM方法相比如此缓慢
- 当我们使用基于标记的DOM就绪执行时,如何处理js函数
- JavaScript-所有DOM操作函数都返回null/empty
- 为什么要在DOM事件触发之前声明命名函数
- DOM渲染是否保证在单个(同步)函数期间阻止'执行
- 在DOM(html)上下文中使用角度作用域函数时出现的问题
- javascript库中的函数/dom调用
- 创建代码以逐个运行函数(DOM)的一些想法
- javascript函数DOM事件监听器使用"this"