4

これは IE でのみ発生します。

私はswfobjectを使用していて、フラッシュ変数をそのままロードしています

var flashVars = {
       myVar:'{"url":"http://google.com/", "id":"9999"}',
};
var params = {
    allowFullScreen:"true",
    wmode:"transparent",
    allowScriptAccess:'always'
    };
swfobject.embedSWF("mySwf.swf", "mySwf", "512", "318", "10.0.0", "./js/swfobject/expressInstall.swf", flashVars, params);

IEを除くすべてのブラウザですべてが完全に機能します。私がチェックmyVarしたところ、それはswf asに入って{います。それだけです。私はそれがで死んでいることを知ってい'ます。私は\インフロントを入れよう\\としましたが、\\\\\\\\. 私はすべてのスラッシュを反転させて、同じ儀式を試みました. 何もない。

逆引用符と二重スラッシュを使用して、最終的に文字列を取得できますが、JSON パーサーは、文字列にスラッシュがあることに腹を立てます。

これは何が機能するかの例ですが、無効な JSON は次のとおりです。

"{\\'url\\':\\'http://google.com/\\', \\'id\\':\\'9999\\'}"
4

2 に答える 2

7

はい、IE は flashVars を他のすべての主要ブラウザとは異なる方法で扱います。文字列からすべての予約文字をエスケープするJavaScript のencodeURIComponentメソッドを使用する必要があると思います。

// Removing all reserved characters from the flashVar value.
var flashVars = {
   myVar: encodeURIComponent('{"url":"http://google.com/", "id":"9999"}'),
};

flashVars で複数の値を渡す場合は、それらを繰り返し処理して、すべての文字を 1 回のパスでエンコードできます。

var flashVars = {
   myVar: '{"url":"http://google.com/", "id":"9999"}',
   anotherVar: 42
};

// Escape all values contained in the flashVars object.
for (key in flashVars) {
    if (flashVars.hasOwnProperty(key)) {
        flashVars[key] = encodeURIComponent(flashVars[key]);
    }
}

@dgmdan と @bcmoney が提案したように、これを使用するとコードが読みやすくなる可能JSON.stringify性がありますが、IE8 以下にはネイティブ JSON オブジェクトがないことに注意する必要があるため、クロックフォードのHTML ページのJS ライブラリ。

// Making use of a JSON library.
var flashVars = {
   myVar: encodeURIComponent(JSON.stringify({ url: "http://google.com/", id: "9999"})),
};

また、flashVars は最大 64k に制限されていることに注意してください。そのため、大量のデータを渡す予定がある場合は、ExternalInterface代わりに呼び出しを使用して JavaScript からデータをプルする方がよい場合があります。

于 2012-04-04T09:42:31.990 に答える
0

これを試して、最初の 3 行を置き換えます。

var subVars = { url: "http://google.com/", id: "9999" };
var flashVars = { myVar: JSON.stringify(subVars) };
于 2012-04-03T16:49:37.077 に答える