2

私は今、一人で Facebook アプリを開発しています。onclick イベントで JavaScript 呼び出しを実行しようとしています。この onclick イベントでは、リンクされているアイテムに基づいて (php のサーバー側から) いくつかの引数を設定しています。少しの JSON とファンキーな文字を含むその他のものを挿入しています。

Facebook は、アンカーのすべての属性フィールドが厳密に英数字であることを期待しています。引用符、感嘆符、0-9a-Z_ 以外は使用しないでください。そのため、ユーザーがそのリンクをクリックしたときに、JavaScript 関数 (JSON など) に渡したい引数を無視します。

そこで、テンプレート システムを使用して JavaScript を自動生成しないのはなぜでしょうか。生成したいリンクごとに、一意の JavaScript 関数を生成します (X はこのページの一意の整数である DoItX)。次に、onclick を介して JavaScript 関数に引数を渡す代わりに、引数を DoX のローカル変数として挿入します。リンク「X」では、onclick="DoX()" とだけ言います。

だから私はこれをやったし、ビオラはうまくいく!(それはまた、私が以前にいた地獄から逃れる引用を避けるのにも役立ちます). でも気持ち悪い

私の質問は、私は気が狂っていますか?これを行う簡単な方法はありますか?何らかの形で誰かが私のテンプレート化されたローカル変数を変更できたという意味を理解しています。

var local = {TEMPLATED FIELD};

クライアントに任意の JavaScript を挿入して、セミコロンで何かに変換します。(そして、私はこれに偏執するようにコードを書こうとしています)。

サーバーからjavascriptを生成するのはいつですか?注意すべきこと/ベストプラクティスはありますか?

4

6 に答える 6

5

アプリケーションによっては、テンプレート言語で JavaScript を生成すると時間を大幅に節約できますが、注意すべき落とし穴があります。最も深刻なのは、完全なテンプレート スタックが利用できない場合に JavaScript をテストするのが非常に難しくなることです。

もう 1 つの大きな落とし穴は、JavaScript ロジックをより高いレベルのクラスに「抽象化」しようとする誘惑に駆られることです。通常、これはプロジェクトでヤクを剃ることになる兆候です。JavaScript ログインを JavaScript に保持します。

あなたが与えた少しの情報から判断すると、あなたの解決策は理にかなっているようです。

于 2009-10-31T03:21:19.787 に答える
4

JavaScript を生成する必要がある場合は、JSONのみを生成し、すべての関数を静的にすることをお勧めします。

これにより、データがより明確に分離され、XSS などを防ぐための検証も容易になります。

于 2009-10-31T03:52:37.990 に答える
2

サーバーから生成された JS は、多くの分野で使用されています。以下は、JS スクリプトがフレームワークによって生成される ASP.NET ページのサンプルです。

<script src="/WebResource.axd?d=9h5pvXGekfRWNS1g8hPVOQ2&amp;t=633794516691875000" type="text/javascript"></script>

再生成を必要としない再利用可能なスクリプト関数を用意してください。そして、サーバー側の生成のために本当に動的なものを「絞り出します」。

于 2009-10-31T03:22:55.897 に答える
1

より快適に使いたい場合は、ほとんどの JavaScript が生成されない別個のライブラリ ファイルにあることを確認してから、コードを生成するときに、大量の JavaScript コードを生成するのではなく、それらのライブラリへの呼び出しを生成します。

于 2009-10-31T03:56:25.390 に答える
0

一般的に言って、サーバーサイド言語からJavaScriptを自動的に生成することは避けていますが、そうしています。JavaScriptが使用するサーバー側変数から初期化されるJavaScript変数を作成します。これにより、テストとデバッグがはるかに簡単になります。

あなたの場合、テストが簡単な次のようなローカル変数を作成できます。

<script type='text/javascript' language='javascript'>
<!--
var FUNC_ARG_X = <%= keyX %>;
var FUNC_ARG_Y = <%= keyY %>;
var FUNC_ARG_Z = <%= keyZ %>;
//-->
</script>
<script type='text/javascript' language='javascript'>
<!--
function DoCleanCall(arg) {
    // Whatever logic here.
}
//-->
</script>

今あなたのマークアップで使用:

<a href='#' onclick='DoCleanCall(FUNC_ARG_X);'>Test</a>

もちろん、サーバー側の変数を<a/>タグに埋め込むこともできますが、JavaScriptの他の部分からこれらの値を参照する必要がある場合があります。

生成されたコンテンツがそれ自体の<script>タグにどのように含まれているかにも注意してください。これは、パーサーが失敗するのを防ぎ、(ASP.NETのように)使用するすべての参照に対して無効なコードがあることを通知するため、意図的に行われます。ただし、セクションのみ。

于 2009-10-31T04:40:54.697 に答える
0

サーバーから JS を生成しても問題ありません。サーバーから大きすぎるページを処理しないように注意してください。

于 2009-10-31T03:17:22.130 に答える