3

私は RequireJS の使用を開始しましたが、新しいコードに対して非常にうまく機能します。ただし、サーバー側で生成されたページ内 JavaScript ブロックを使用するアプリの大部分があります。これを橋渡しするための最良のアプローチが何であるかを誰かが知っているかどうか疑問に思っていました。すべての JavaScript を完全なクライアント側アプリに書き直すのは永遠にかかるので、やり直したくありません。私の質問は、RequireJS がロードされた後にページ内のものを実行する方法はありますか? また、Require で説明されているライブラリをレガシー コードに公開するクリーンな方法はありますか?

すなわち

require がロードされたら、これを実行するようにどのように適応させることができますか?

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

jquery の依存関係に注意してください。

4

1 に答える 1

1

私が提案しようとしていることについては本当に用心深い. Javascript の基本的な動作方法に逆らっているようなものです。私は、この種の問題を、HTML 以外のコードとして再作成する担当者の「雇用保障」と考えたいと思っています。

しかし、あなたがそれを聞きたいのであれば、私はeval. それだけで、私は反対票を投じられると思いますが、正当な理由がないわけではありません。私はこれをテストしていません(「代替タイプのスクリプト」とその選択を除く)が、この質問には2つの賛成票があり、答えはありませんでした. そのため、潜在的なセキュリティ リスクを考慮して評価する必要があります。

ページ内スクリプトを次のように置き換えることから始めます。

<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 に答える