私が構築している小さなシステムでエンコーディングの問題に苦しんでいます。
HTML では、このスクリプトが読み込まれます
<script src="http://localhost:8000/serving/dk-711218"></script>
通常は HTML にアクセスできないため、すべてを JavaScript ファイル内で行う必要があります。
サーバー側スクリプトは Node.js で作成され、カスタマイズ可能な XML ファイルの設定に応じてコードの断片を返します。たとえば、画像を表示するとき、システムは単純な
<img src="mypicture.jpg" />
テキストの場合は、
<div class="myClass">This is a test</div>
特別な動作がある場合は、このコードも含まれます。
これらの部品は意図したとおりに機能します。これらのコードのチャンクは多くのクラス内に存在し、コードが徐々に構築されるように必要に応じて返されます。
ここまでは順調ですね。
問題は SWFobject ライブラリ コードを返すことです。これは、その場でコードを破損しているように見えるためです。
すべてのコードはエスケープおよびエンコードされているencodeURIComponent
ため、システムはデコードおよびエスケープ解除するだけで済みます。しかし、検証は失敗します。
エンコード/エスケープする前の最初の数行の例を次に示します。
var%2520swfobject%253Dfunction%2528%2529%257Bvar...
ページにアクセスすると、SWFObject の一部が Firefox のソース コード ウィンドウでどのように表示されるかを次に示します。
デコードされた SWFObject の一部が同じウィンドウでどのように表示されるかを次に示します。
これはいくつかの場所で発生し、これらの発生に共通することは、不明な理由で小なり文字が異なるように解釈されるように見えることです。
これがビューレンダラーです。問題がコードで発生したのか、コードをレンダリングするときに発生したのかわかりません。
この動作の原因についてのアイデアはありますか? あるいは、この方法でコードを組み込む際のベスト プラクティスに関するアドバイスはありますか?
コメントへの返信:
試す
JSON.stringify
JSON ソリューションも試してみましたが、うまくいきました。 私が行ったことは、以前と同様に、2 つの入力フィールドと 2 つの間の JSON.stringify-command で構築した小さなツールを使用して、含まれているコードを前処理することでした。これにより、returnvar の内容が次のようになりました。
Module.prototype.opens = function () {
var returnvar = "var swfobject=function(){var D=\"undefined\",r=\"object\",S=\"Shockwave Flash\",W=\"ShockwaveFlash.ShockwaveFlash\",q=\"application/x-shockwave-flash\",R=\"SWFObjectExprInst\"... etc.
JSON.parse を使用して、レンダラーで再度修正します。
router.get('/serving/:id', function (req, res) {
var readSymbolicsXMLCallback = function(data) {
res.render('index', {
id: req.params.id,
embedcode: JSON.parse(data)
});
}
var embedcode = readSymbolicsXML(req.params.id, readSymbolicsXMLCallback);
});