2013-07-26 48 views
3

我已经开始使用RequireJS,并且它对新代码非常有效。 但是,我们有大部分应用程序用于在服务器端生成的页面JavaScript块。 我想知道是否有人知道什么是最好的方法来弥补这一点。我不想将所有的JavaScript重写为一个完整的客户端应用程序,因为这将永远需要。所以我的问题是,是否有一种方法可以在RequireJS加载后运行页面内容,并且是否有一种将需求中描述的库暴露给遗留代码的干净方式?RequireJS和页面代码中的遗留

你怎么能适应这个运行一旦需要就装:

<script type="text/javascript">alert($('#somediv').html())</scipt> 

注jquery的扶养。

回答

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,可能有时间运行一个脚本在里面。

+0

这是一个有趣的方法,我没有想到。 –