无法让 document.write 使用 ajax
Posted
技术标签:
【中文标题】无法让 document.write 使用 ajax【英文标题】:Can't get document.write to work with ajax 【发布时间】:2015-11-17 07:43:38 【问题描述】:我有一个使用 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 但我似乎无法弄清楚如何利用我所拥有的东西来实现它。
感谢您提供的任何帮助。
更新: 脚本 sn-p 是第三方小部件。通过将其插入前端网页编辑器来使用它,该编辑器允许用户将内容放置在页面上他们想要的任何位置(通过 ajax)。定位后,也可以使用前端编辑器对其进行样式设置。当页面是用户想要的样子时,他们可以保存布局,并且前端编辑器在需要时被禁用(关闭)。发生这种情况时,脚本 (document.write) 将在页面上加载并正常工作,而不受基于 ajax 的前端编辑器的干扰。 我在想是否有办法缓存 document.write(html 部分)的 html 结果,然后可以通过前端编辑器加载缓存的版本。然后,一旦前端编辑器被禁用或关闭,我就可以用原始脚本 w/document.write 替换小部件的 html 缓存版本。我玩弄了逻辑,我能够根据前端编辑器的状态交换加载的内容。我想我的问题是可以缓存或保存 document.write 内容吗?我想我可以处理之后如何使用它的逻辑。
【问题讨论】:
是的。只是不要使用document.write
。为什么你认为你需要它?
我无法控制使用它。它来自第三方来源(另一家公司及其代码)。
然后请他们修复它,document.write
无论如何都是不好的做法 :-)
如何重写它以使用 ajax?我可能需要一个详细的例子。谢谢
即使您可以覆盖该方法...该脚本标签中的脚本也完全有可能使用它来编写内容,您可能会也可能无法解析任何部分可能是一个糟糕的情况。很大程度上取决于实际脚本中的内容
【参考方案1】:
没有解决办法。 document.write()
在 onload 事件触发后替换文档。做不到。
你不能让它工作*。
*注意:从技术上讲,如果您编写自己的网络浏览器,则可以使其工作,因为这样您就可以使您的浏览器不像所有其他浏览器那样运行,并在document.write()
上追加而不是替换。但是你不能让它与 Chrome 或 IE 或 Firefox 或 Opera 一起工作。
为了快速解决问题,请改用.innerHTML
。要获得更好的解决方案,请学习 DOM 操作 API(或使用 DOM 库)。
【讨论】:
*从技术上讲,用无害的函数覆盖document.write
很容易 :-)
对于一个简单的解决方案,只需使用两个脚本标签而不是一个写第二个标签。
如何重写它以使用innerHTML?正如我在上面的评论中所说,sn-p 来自第三方。
@Bergi:重载document.write()
是一个很好的解决方案!想把它写下来作为答案吗?
@bergi 是的。任何帮助都会很棒。以上是关于无法让 document.write 使用 ajax的主要内容,如果未能解决你的问题,请参考以下文章
如果使用 document.write,则无法以编程方式插入 js
“将图像另存为..”在使用 window.open() 和 document.write() 时无法在 Google Chrome 中运行
使用可能包含 document.write 的 src 动态添加脚本标签