我正在与一些看似简单的事情进行一场战斗。我有一个[javascript]字符串,其中包含DOM元素,并且想要打开一个新窗口(window.open()?)并使用填充新窗口的字符串。即让浏览器获取字符串并将其转换为HTML。这可能吗?
答案 0 :(得分:50)
是的,这是可能的......
var wnd = window.open("about:blank", "", "_blank");
wnd.document.write(html);
这应该可以解决问题。
答案 1 :(得分:6)
Archer的答案很好,但如果您愿意,可以在一个班轮内完成:
window.open("data:text/html;charset=utf-8,"+html, "", "_blank")
window.open("data:text/xml;charset=utf-8,"+xml, "", "_blank")
使用XML,确保字符串以<?xml version="1.0" encoding="UTF-8"?>
开头并具有根元素。如果没有,您可以轻松添加它:
window.open('data:text/xml;charset=utf-8,<?xml version="1.0" encoding="UTF-8"?><RootTag>'+xml+'</RootTag>', "", "_blank")
答案 2 :(得分:4)
阿切尔的回答是最好的方法。但是您需要关闭文档以在“htmlString”中运行脚本。
Exception in thread "main" java.lang.ClassNotFoundException: MatAddApp
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:278)
at org.apache.hadoop.util.RunJar.run(RunJar.java:214)
at org.apache.hadoop.util.RunJar.main(RunJar.java:136)
答案 3 :(得分:0)
如果需要在新标签页中可以使用此标签。
const win = window.open('about:blank', '_blank');
win.document.write('<h1>test</h1>');
win.focus();
答案 4 :(得分:-1)
请注意,尽管window.open
在2013年是一个很好的解决方案,但现在不再是这种情况了,window.open
在这里不再是正确的答案;由于多年的广告滥用,几乎所有浏览器都已默认禁用该浏览器,并且它被遗忘为一种旧机制,可在其正常运行时完全绕过浏览器历史记录。
相反,构建一个链接锚元素,将其内容分配为data-uri,为其赋予一个target="_blank"
,以便它将在新标签页中打开,然后在其上触发一个click()
以便将其作为正常的网页打开,并在浏览器的历史记录中带有正常的条目:
function openAsPageInNewTab(pageContent) {
let encoded = encodeURIComponent(pageContent);
let a = document.createElement(`a`);
a.target = `_blank`;
a.href = `data:text/html;charset=utf-8,${encoded}`;
a.style.display = `none`;
document.body.appendChild(a); // We need to do this,
a.click(); // so that we can do this,
document.body.removeChild(a); // after which we do this.
}
您当然可能仍然会收到弹出警告,因为它应该,但是至少您现在在做事时要尊重用户和浏览器,这与传统的window.open
方法不同。