2013-10-18 3 views
1

iPhone/iPad에서 SVG를 표시하려고합니다. 이 코드는 ASP.Net 페이지에서 실행 중입니다. Raphael을 사용하여 그래픽과 Raphael이 처리하는 다른 모든 재즈를 표시합니다. 그러나 iOS에서 실제로 실행되지 않는 코드가 있습니다.iOS에서 HTML/jQuery onload/load가 실행되지 않습니다.

img = new Image(); 

//img.onload = function() { drawLayersWhenAllAreLoaded(); }; 
if (img.addEventListener) { 
    img.addEventListener('load', drawLayersWhenAllAreLoaded, false); 
} 
else { 
    img.attachEvent("onload", function() { return (drawLayersWhenAllAreLoaded.call(img, window.event)); }); 
} 

img.src = files[i]; 

Windows의 Chrome, Firefox 및 Safari에서이를 테스트했으며 훌륭하게 작동합니다. Mac OS X의 Chrome, Firefox 및 Safari에서이 기능을 테스트했으며 훌륭하게 작동합니다. 그러나 iOS에서 실행할 때 (iOS 6 또는 iOS 7이 iPhone이나 iPad와 상관이 없다면) drawLayersWhenAllAreLoaded 기능이 실행되지 않습니다. 실행되지 않으면 이미지가 화면에 표시되지 않습니다.

테스트 한 최종 코드입니다. iOS를 확인하지 않은 것을 테스트했습니다. 방금 img.onload을 사용하여 테스트했습니다. 나는 단지 img.addEventListener을 사용해 보았습니다. 이 코드의 모든 버전을 가장 간단한 것에서 가장 복잡한 것까지 시도해 본 결과, 전혀 작동하지 않습니다. drawLayersWhenAllAreLoaded에 알림을 걸면 위의 모든 브라우저에 표시되지만 iOS에는 표시되지 않습니다.

제 생각에 이미지의 src을 HTML/jQuery에 설정하면 이미지가로드됩니다. 이미지가 상당히 클 수 있으므로 drawLayersWhenAllAreLoaded을 호출하기 전에 모두로드 될 때까지 기다려야합니다 (이 코드는 반복적 인 이미지로드).

나는 비슷한 것을 찾고 몇 시간 동안 Google을 검색했지만 아무 것도 찾을 수 없었습니다. 아무도이 문제에 다시 뛰어든 지 궁금하거나 내가 잘못하고있는 것을 보지 않습니까?

감사합니다.

편집 : 더 많은 테스트 후

을 내 drawLayersWhenAllAreLoaded 한 번만 칠 수 있지만 않는 것으로 확인되었습니다. 현재 32 개의 이미지를로드하려고합니다. 이미지를로드하는 코드는 iOS에서 32 회 실행되지만 (경고를 추가 할 때마다 표시됨), drawLayersWhenAllAreLoaded은 한 번만 호출됩니다.

답변

0

그래서 결국 load 메서드를 실행할 수있게되었습니다. imagesLoaded (http://desandro.github.io/imagesloaded/)을 사용하도록 코드를 전환 했는데도 여전히 문제가 해결되지 않았습니다. Mobile Safari에서는 DOM에 추가되지 않은 객체를로드하지 않는 것 같습니다. 동적으로 생성 된 이미지를 div에 추가하면 작업이 시작됩니다. 그것이 메모리 목적을위한 애플의 의도인지 또는 단지 문제인지는 잘 모르겠습니다.

생각 나는이 문제에 부딪 힐 수있는 누군가를 돕기 위해이 글을 올릴 것입니다.

var $img = $('<img>').attr('src', files[i]) 
       .css({ 
       "position":"absolute", 
       "top":"0px", 
       "left":"0px",) 
      .prependTo(".canvas").imagesLoaded(function() { 
        drawLayersWhenAllAreLoaded(); 
}); 
관련 문제