【问题标题】:Javascript's document.write prevents following code executionJavascript document.write 阻止以下代码执行
【发布时间】:2011-06-28 20:55:28
【问题描述】:

我了解document.write 阻止执行以下 javascript。

例如,document.write 将阻止执行以下 javascript,直到 document.write 块完全执行。

<!doctype html>
<script>
document.write('<script>alert(1)<'+'/script>');
alert('2');  
</script>

http://jsbin.com/alefob

您可以更进一步,要求在执行以下脚本之前远程加载 javascript。

<!doctype html>
<script>
document.write('<script src="remote_script.js"><'+'/script>');
alert(remote_script_variable);  
</script>

显然我可以进行回调,但这不是我想要的。

问题

基本上是否有任何其他功能具有阻止脚本加载直到完成的独特功能(我可能想要避免的其他功能)?

假设没有其他函数具有这种独特的功能。 document.write 可以在页面加载后使用而不覆盖页面内容吗?

已经明白了

我知道您可以在使用yennop.js 的同时执行以下操作

var script = document.createElement('script');
var currentScript = document.getElementsByTagName('script')[0];
currentScript.parentNode.insertBefore(script,currentScript);
script.src = '//some url';

【问题讨论】:

  • 一般document.write() 无论如何都应该避免。不,你不能在 DOM 准备好之后(即在初始文档关闭之后)使用它而不吹走页面。
  • document.createFragment 或 iframe 把戏怎么样?
  • 一个文档片段就像一个“迷你DOM”;我知道没有办法像页面文档一样“打开”它。现在,一个 iframe,是的,这可能会起作用。一个大问题是,既然有这么多创建新内容的更好方法,您为什么要这样做?
  • 另外,虽然“document.write”确实是同步的,但它并不需要大量的时间来运行。应该和使用“.innerHTML”注入内容大致相同。

标签: javascript


【解决方案1】:

Synchronous XHR 在许多浏览器中停止世界,直到收到响应或请求出错。

很明显,document.writeln 以与document.write 相同的方式停止世界。

【讨论】:

  • 很遗憾 Synchronous XHR 不兼容跨站点。
  • @Lime,您可以通过同一来源的页面代理内容来解决这个问题。
  • 有趣,因为我虽然对Synchronous XHR 的跨浏览器支持很差。这就是为什么我认为 jQuery 有一个回调函数以及一些其他库。
  • @Lime,对不起。我在您之前的帖子中将“跨站点”解释为 XHR 不允许您从与页面不同的来源获取内容这一事实的参考。你的意思是说有主流浏览器不支持同步XHR?
  • 嗯,我正在寻找一个跨浏览器解决方案:D 以及与跨源兼容。 2x 都很好
猜你喜欢
  • 2021-12-22
  • 1970-01-01
  • 2016-11-05
  • 1970-01-01
  • 2018-10-24
  • 1970-01-01
  • 2015-11-01
  • 2016-06-14
  • 1970-01-01
相关资源
最近更新 更多