我已经开始使用RequireJS,它对新代码非常有效。 但是,我们有很大一部分应用程序用于生成服务器端的页面javascript块。 我想知道是否有人知道什么是最好的方法来弥合这一点。我不希望将所有JavaScript重写为完整的客户端应用程序,因为它将永远需要。所以我的问题是,有没有一种方法可以在RequireJS加载后运行页面内容,并且是否有一种干净的方式来公开需要遗留代码中描述的库?
即
如果需要加载,你怎么能适应这个:
<script type="text/javascript">alert($('#somediv').html())</scipt>
请注意jquery依赖性。
答案 0 :(得分:1)
我对我要提出的建议非常谨慎,因为我认为这是一个不幸的问题,原因是设计错误;你有点像Javascript工作的基本方式。我真的更愿意将这类问题视为“工作保障”,指派人员将这些内容重新制作为HTML之外的代码。
但是如果你想听听它,我确实有一个使用eval
的可能解决方案。仅此一点,我认为我将被投票,并非没有充分理由。我甚至没有测试过这个(除了'替代类型的脚本'及其选择),但看到这个问题有两个upvotes,没有答案,我想我会建议它。因此,您将不得不对其潜在的安全风险进行评估。
首先用以下内容替换页内脚本:
<script type="text/postRequireScript">alert($('#somediv').html())</script>
由于浏览器不知道“postRequireScript”是什么,因此不会加载它。加载requirejs后,运行此脚本(您还可以为这些脚本添加“类”,以便更轻松地选择所有脚本)
$("script[type='text/postRequireScript']").each(function() {
var scriptContent = $(this).text();
// highly recommend you do at least some sanitization on scriptContent, if you know
// what sort of things to expect from it.
eval(scriptContent);
this.type = 'text/completedScript'; // prevent script from being re-run.
});
每次添加可能包含脚本的HTML时都需要运行。