我有各种各样的backbone.js CMS,它接受html,然后在浏览器中呈现它。以下是呈现主干页面对象的模板文件(在 .hamlc 中)。
%h1.text= @page.get('title')
.text.page-content!= @page.get('content')
这工作正常,直到我有一个<script>
标签。我有一个小部件的脚本标签(下)
<script src='http://www.opentable.com/frontdoor/default.aspx?rid=52900&restref=52900&bgcolor=8AA86B&titlecolor=0F0F0F&subtitlecolor=0F0F0F&btnbgimage=http://www.opentable.com/frontdoor/img/ot_btn_black.png&otlink=FFFFFF&icon=light&mode=short&hover=1'></script>
这个小部件使用document.write
(如果您查看源代码,您可以看到)。首先,当我加载页面时它不显示任何内容(我已经在一个 html 文件中单独测试了这个小部件,它显示了它们正常的 God-awful )。当我检查元素时,看起来脚本标签已被删除。
但是,当我使用以下内容进行测试时:
<script type="text/javascript">
alert(0);
</script>
它运行。尽管如此,检查员仍然什么都没有。
最后,使用以下内容进行测试:
<script type="text/javascript">
document.write('test');
</script>
它也运行。但是,它完全破坏了页面内容,只显示“测试”。
根据这篇关于使用 document.write for widgets 的文章,它说它在页面加载后无法运行。我假设这里发生的事情是 document.write 在页面加载后运行并销毁所有内容,因为这是主干.js 使用的技术(加载/替换页面加载后的 DOM 中的元素)。
如何使我的 Backbone.js CMS 接受带有 document.write 小部件的脚本标签,而不显示任何内容或破坏整个页面?