3

我已经开始使用 RequireJS,它对新代码非常有效。但是,我们有很大一部分应用程序在服务器端生成的页面 javascript 块中使用。我想知道是否有人知道解决这个问题的最佳方法是什么。我不希望将所有 JavaScript 重写为完整的客户端应用程序,因为这将花费很长时间。所以我的问题是,有没有一种方法可以在加载 RequireJS 后运行页面内的内容,并且是否有一种干净的方法可以将 Require 中描述的库暴露给遗留代码?

IE

一旦加载了要求,您如何调整它以运行:

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

注意 jquery 依赖性。

4

1 回答 1

1

我对我将要提出的建议非常谨慎,因为我认为这是一个不幸的问题,即最初的设计不正确;你有点违背 Javascript 的基本工作方式。对于被指派将这些东西重新制作为 HTML 之外的代码的人,我真的更愿意将此类问题视为“工作保障”。

但如果你想听听,我确实有一个可能的解决方案,使用eval. 仅凭这一点,我认为我会被否决,而且并非没有充分的理由。我什至没有对此进行测试(除了“具有替代类型的脚本”及其选择),但看到这个问题有两个赞成票,没有答案,我想我会建议它。因此,您将不得不对其潜在的安全风险进行评估。

首先用以下内容替换页面内脚本:

<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 时,都需要运行它。

于 2013-07-26T14:10:25.020 回答