4

这只发生在 IE 中。

我正在使用swfobject并加载 flash vars

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,它进入了瑞士法郎{,就是这样。我知道它快死了'。我试过在前面放一个\,然后尝试\\并不断添加一个斜线,直到我到达\\\\\\\\. 我什至颠倒了所有的斜线并尝试了同样的仪式。没有。

我可以让字符串最终通过,使用倒引号和使用双斜杠,但是我的 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 中传递多个值,那么您可以遍历它们并在一次传递中对所有字符进行编码:

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 对象,因此您需要包含Crockford 的HTML 页面中的JS 库

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

此外,值得记住的是 flashVar 被限制在 ~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 回答