2012-04-03 42 views
4

這只是發生在IE瀏覽器Internet Explorer中截斷Flash變量。含JSON

我使用swfobject的和加載Flash變量這樣

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的{,就是這樣。我知道它快死於'。我試圖把一個\盈,然後試圖\\持續加入一個斜線,直到我到\\\\\\\\。我甚至倒轉了所有的斜線,並嘗試了同樣的儀式。沒有。

我能得到的字符串終於來了通過,以倒引號之間,使用雙斜線,但後來我的JSON解析器生氣關於我的字符串是有斜槓。

這裏是什麼工作的例子,但對什麼是無效的JSON:

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

回答

7

沒錯IE對待Flash變量不同到所有其他主要的瀏覽器,我相信你需要使用JavaScript的方法,它將從字符串中跳過所有保留字符,例如:

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

如果您傳遞多個值在Flash變量,那麼你可以遍歷它們和編碼在單程所有字符:

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's JS Library在你的HTML頁面。

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

另外,值得注意的是,flashVars限制在〜64k;所以如果您打算傳遞大量數據,最好使用ExternalInterface調用將它們從JavaScript中提取出來。

+0

我切換到外部接口,目前一切工作正常。但是,這不是因爲64k的限制。我將不得不嘗試1encodeURIComponent1,以便如此。感謝親們的回答! – Jacksonkr 2012-04-04 17:23:17

+0

根據[caniuse](http://caniuse.com/json),本機JSON適用於IE8 – paleozogt 2013-10-31 21:23:27

0

試試這個來代替你的第3行:

var subVars = { url: "http://google.com/", id: "9999" }; 
var flashVars = { myVar: JSON.stringify(subVars) };