我有一个字符串,看起来像:
我将此字符串作为结果返回给AJAX请求。
我希望浏览器呈现并显示该字符串。 想法是做类似的事情:
$('html').parent().html(myString);
嗯,这不起作用。 我试图使用IFRAME,但我还没弄明白如何让它工作。
注意:我不可能更改此字符串。 我也不可能在随后的服务器调用中重新生成此字符串(否则我只能将浏览器重定向到该URL)。
据我所知,html元素没有父元素,IE6和IE7除外。 (但它们几乎不算数)所以你需要查看直接在$('html')上工作的操作 - 外部声音听起来是正确的。
document.open/write/close方法将执行您想要的操作:
var newDoc = document.open("text/html","replace");
newDoc.write(myString);
newDoc.close();
除非传入replace参数,否则document.open调用会添加页面历史记录。因此,用户必须再次单击两次才能转到上一页。
谢谢,这完美无缺。你碰巧知道在任何非浏览器中这种行为是否有所不同?
由于这些已经成为DOM的一部分很长一段时间了,我希望它们可以在所有现代浏览器中正常工作。
嘿,目前使用解决方案时firefox和硬刷新存在问题。现在有解决方法吗?
非常有用,谢谢
你能打开一个新窗口并在那里显示内容吗?
它在Firefox中不起作用。 :S
此解决方案适用于W7 / MF,但在执行语句newDoc.write(myString)时,我在W7 / IE中收到错误号为-2146828218的Permission denied错误。
您可以删除html标记,然后将所有内容放在html元素中:
$('html').html(myString.replace(/(.*)/,"$1"));
谢谢,但这不起作用。无论我尝试什么值,$('html').html(somevalue)的结果都是一个空白页面(在IE中)。
似乎在Chrome&FF中工作,所以!
不需要剥离$("html").html(myString)自动执行。
至少在firefox(47.0)解决方案中:
var newDoc = document.open("text/html","replace");
newDoc.write(response);
newDoc.close();
由于按下firefox上的后退按钮仍然加载了以前的历史记录条目 - 即使用"替换"的整个点是为了避免用户单击其后退按钮仅在最后一个页面的视图之前受到欢迎调用document.write()的时间。这样做不会导致上述影响的方法就是直接调用文档对象上的方法:
document.open("text/html","replace");
document.write(response);
document.close();
使用replace选项不仅可以避免使用垃圾填充用户历史记录,还可以帮助处理浏览器经常处理javascript创建的历史记录条目的奇怪方式所引起的问题,因为有时允许浏览器记录所做的更改处理后退/前进操作(例如,在对其历史记录还原的文档执行document.write()之后,将"wyciwyg://(somenumber)"添加到url中,可能会在历史记录中通过javascript对文档进行处理到以前的状态)。
尝试的另一种变化可能是
$('html').replaceWith(myString);
http://api.jquery.com/replaceWith/
请注意,这也取代了jQuery对象,因此如果您要保留引用,则需要更新它们。
不行。在Firefox中HierarchyRequestError: Node cannot be inserted at the specified point in the hierarchy。
与inf3rno => Node几乎相同的结果无法替换自身
使用chrome我遇到了这个错误:Uncaught DOMException:无法在'Node'上执行'replaceChild':'#document-fragment'类型的节点可能不会插入'#document'类型的节点中。
document.documentElement.innerHTML = myString;
它的工作原理除IE9外。