我可以打开一个新窗口并用字符串变量填充它吗?

时间:2013-07-05 16:08:59

标签: javascript jquery html dom

我正在与一些看似简单的事情进行一场战斗。我有一个[javascript]字符串,其中包含DOM元素,并且想要打开一个新窗口(window.open()?)并使用填充新窗口的字符串。即让浏览器获取字符串并将其转换为HTML。这可能吗?

5 个答案:

答案 0 :(得分:50)

是的,这是可能的......

var wnd = window.open("about:blank", "", "_blank");
wnd.document.write(html);

这应该可以解决问题。

答案 1 :(得分:6)

HTML

Archer的答案很好,但如果您愿意,可以在一个班轮内完成:

window.open("data:text/html;charset=utf-8,"+html, "", "_blank")

打开XML?

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方法不同。