我有一个使用 document.write 的脚本,需要在 ajax 中工作,但我无法找到使其工作的解决方案。这是通过 ajax 加载到页面中的脚本。
<script type="text/javascript">
example_widget_id = "example-1234";
example_widget_name = "registration";
example_widget_type = "example";
document.write(unescape("%3Cscript src='https://widgets.example.com/javascripts/example_widget.js' type='text/javascript'%3E%3C/script%3E"));
</script>
发生的情况是页面变成空白...这对于 document.write 和 ajax 来说是正常的。我正在尝试找到一种通过innerHTML(或其他解决方案)添加它的方法,但我没有运气。我看了这个帖子JavaScript Document.Write Replaces All Body Content When Using AJAX 但我似乎不知道如何利用我所拥有的东西来实现这一点。
感谢您提供的任何帮助。
更新: 脚本片段是第三方小部件。通过将其插入前端网页编辑器来使用它,该编辑器允许用户将内容放置在页面上任何他们想要的位置(通过ajax)。一旦定位完毕,还可以使用前端编辑器对其进行样式设置。当页面符合用户想要的方式时,他们可以保存布局,并且前端编辑器将被禁用(关闭)直到需要为止。当这种情况发生时,脚本(document.write)将在页面上加载并正常工作,而不会受到基于 ajax 的前端编辑器的干扰。 我在想是否有一种方法可以缓存 document.write (html 部分)的 html 结果,然后可以通过前端编辑器加载该缓存版本。然后,一旦前端编辑器被禁用或关闭,我就可以用原始脚本 w/document.write 替换小部件的 html 缓存版本。我研究了这个逻辑,并且能够根据前端编辑器的状态来交换加载的内容。我想我的问题是 document.write 内容可以被缓存或保存吗?我想我可以处理之后如何使用它的逻辑。
最佳答案
没有解决方案。 document.write()
在 onload 事件触发后替换文档。这是不可能的。
你无法让它工作*。
*注意:从技术上讲,如果您编写自己的网络浏览器,则可以使其工作,因为这样您就可以使您的浏览器的行为不像所有其他浏览器一样,并在 document.write( 上附加而不是替换) )
。但您无法使其与 Chrome、IE、Firefox 或 Opera 一起使用。
要获得快速解决方案,请改用 .innerHTML
。为了获得更好的解决方案,请学习 DOM 操作 API(或使用 DOM 库)。
关于javascript - 无法让 document.write 与 ajax 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32172904/