2013-10-18 5 views
0

당신은 여기에 쉼표를 후행에 많은 정보를 정기적으로 찾을 : 그것은 "바로"에서 쉼표에 관하여 Are trailing commas in arrays and objects part of the spec?IE7/IE8에서 작업 (자바 스크립트) 쉼표를 후행 받기

.

[ 
     { title: "..", display: function() { return ".."; } }, 
     { title: "..", display: function() { return ".."; } }, 
     { title: "..", display: function() { return ".."; } }, // <--right there 
    ] 

내 문제는 타사 도구는 후행 쉼표로이 목록을 생성하고, 나는이 도구의 소스 코드에 액세스 할 수 없습니다 오전, 지금이다. I

<body> 
my stuff 
<!-- the folloging div with the javascript comes from the 3rd party --> 
<div class="item"><script type="text/javascript"> 
$(document).ready(function() { 


    $.supersized({ 

     // Functionality 
     slide_interval   : 8000,  // Length between transitions 
     transition    : 1,   // 0-None, 1-Fade, 2-Slide Top, 3-Slide Right, 4-Slide Bottom, 5-Slide Left, 6-Carousel Right, 7-Carousel Left 
     transition_speed  : 400,  // Speed of transition 
     fit_always    : 0,   //Prevents the image from being cropped by locking it at 100% width. 
     min_width    : 600,  //min-width of images 
     random     : 0,  //random img 
     vertical_center   : 1,   //vertical alignment 

     // Components       
     slide_links    : 'false', // Individual links for each slide (Options: false, 'number', 'name', 'blank') 
     slides     : [   // Slideshow Images 

    {image : 'image1.jpg', otherstuff: 'blah', moreotherstuff: 'lorem'}, 

    {image : 'image2.jpg', otherstuff: 'blub', moreotherstuff: 'ipsum'}, 


            ] 
    }); 
}); 
</script></div> 

이제는 IE7/IE8에서 작동하는 방법이 있는지 묻습니다.

(내가 제 3 자 편집 할 수 있으며, 서버에 액세스 할 수있는) 지금 바로 볼 수있는 유일한 방법은 다음과 같습니다 - 그 DIV 없이 특별한 출력을 제공 - 아약스를 통해 정상 측 요청 - 모든 구문을 분석하고이 div를 가져 와서 마지막 쉼표를 삭제하고 자바 스크립트를 실행하십시오.

사실 내가 원하는 방식이 아닙니다. 이 문제를 해결할 수있는 또 다른 방법이 있습니까?

답변

3

해당 배열을 자르지 않는 한 IE7/IE8은 더 큰 배열 길이 1 개를보고합니다.

제 3 자의 데이터를 허용하는 모든 JS 메소드를 알고 있다면 해당 메소드에 대한 래퍼를 작성할 수 있습니다. 예 :

var removeEmpty = function(array){ 
    var i, result = []; 

    for (i = 0; i < array.length; ++i){ 
     if (typeof array[i] != 'undefined'){ 
      result.push(array[i]); 
     } 
    } 

    return result; 
}; 

$.supersized = (function() { 
    var origMethod = $.supersized; 

    return function(config) { 
     config.slides = removeEmpty(config.slides); // get rid of undefined data in array 
     return origMethod.call(this, config); // call original method 
    }; 
}()); 
+0

나는 그것을 당신의 방식대로했습니다. 고마워요. – nbar

1

아니요, 해당 후행 쉼표를 IE에서 작동시키는 방법은 없습니다. 그것은 단순히 할 수 없습니다. 그것은 브라우저의 자바 스크립트 파서의 기본 부분입니다.

이것은 매우 잘 알려진 문제입니다. 즉, 타사 도구에 결함이 있으며 명확하게 테스트되지 않았 음을 의미합니다. 네가 어디서 났는지는 모르겠지만 네가 돈을 지불하면 내가 너라면 크게 불평 할거야.

소스에서 문제를 실제로 처리 할 수없는 경우 나머지 옵션은 생성 된 코드가 IE에 들어가기 전에 수정하는 것입니다. 그렇게 많은 것이 끝난 것보다 쉽습니다. 생성 된 코드의 복잡성에 따라 간단하고 예측 가능한 경우에는 정규 표현식을 작성할 수 있지만 생성하는 코드가 복잡하거나 복잡성이 다양 할 경우 해당 아이디어에 문제가있을 수 있습니다.