2012-04-03 5 views
4

Это происходит только в IE.Ускоряющий flash-браузер Internet Explorer, содержащий JSON

Я использую 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 как { и все. Я знаю, что он умирает на '. Я пробовал поставить \ infront, затем попробовал \\ и продолжал добавлять одну косую черту, пока не добрался до \\\\\\\\. Я даже перевернул все косые черты и попробовал один и тот же ритуал. Ничего.

Я могу получить строку, чтобы, наконец, пройти, с перевернутыми кавычками и с помощью двойных слэшей, но тогда мой парсер JSON злится, что в моей строке есть косые черты.

Вот пример того, что работает, но то, что является недопустимым в формате JSON:

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

ответ

7

Yep 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 и ниже do not имеют собственный объект JSON, поэтому вам нужно будет указать Crockford's JS Library на вашей странице HTML.

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

Кроме того, стоит иметь в виду, что вспышки ограничены ~ 64k; поэтому, если вы планируете передавать много данных, возможно, лучше использовать вызов ExternalInterface, чтобы вытащить их из JavaScript.

+0

Я переключился на внешний интерфейс, и теперь все работает нормально. Однако это не из-за предела 64k. Я должен попробовать 1encodeURIComponent1, хотя и так, как это происходит. Спасибо за профессиональный ответ! – Jacksonkr

+0

Согласно [caniuse] (http://caniuse.com/json), родной JSON доступен для IE8 – paleozogt

0

Попробуйте заменить ваши первые 3 строки:

var subVars = { url: "http://google.com/", id: "9999" }; 
var flashVars = { myVar: JSON.stringify(subVars) }; 
Смежные вопросы