2012-04-03 2 views
4

IE에서만 발생합니다.JSON이 포함 된 Internet Explorer 자르기 flashVars

나는 swfobject를 사용하여 모든 모든 브라우저하지만 IE에서 완벽하게 작동

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); 

같은 플래시를로드하는 것은 바르하고 있습니다. 나는 myVar을 검사했고 swf에 {으로 들어 왔고 그게 전부입니다. 나는 그것이 '에 죽어 가고있는 것을 안다. \을 infront에 넣고 시도한 후 \\을 시도하고 \\\\\\\\에 도착할 때까지 하나의 슬래시를 계속 추가했습니다. 나는 심지어 모든 슬래시를 거꾸로 돌리고 같은 의식을 시도했다. 아무것도.

마침내 역 따옴표를 사용하고 이중 슬래시를 사용하여 문자열을 가져올 수 있지만 내 JSON 구문 분석기는 내 문자열에 슬래시가 있다는 것에 대해 화를냅니다. 여기

는 어떤 작품의 예이지만, 잘못된 JSON 무엇 :

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

답변

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 객체가 없으므로 HTML 페이지에 Crockford's JS Library을 포함해야합니다.

// 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

+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) };