2013-10-18 84 views
1

我試圖在iPhone/iPad上顯示SVG。此代碼在ASP.Net頁面中運行。我正在使用Raphael來顯示Raphael處理的圖形和其他所有爵士樂。不過,我擁有的代碼實際上並未在iOS上執行。HTML/jQuery onload/load沒有在iOS上執行

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上。

根據我的理解,在HTML/jQuery中設置圖像的src將加載圖像。我們的圖片可能相當大,所以在調用drawLayersWhenAllAreLoaded(這段代碼在一個加載一堆圖片的循環中)之前,我需要等待它們全部加載。

我搜索了Google搜尋了幾個小時尋找類似的東西,但無法找到任何東西。想知道是否有人再次遇到這種情況,或看看我做錯了什麼?

謝謝。

EDITED

更多的測試後,我已經決定了我drawLayersWhenAllAreLoaded沒有被打到,但只有一次。我目前正在嘗試加載32張圖片。加載圖像的代碼在iOS上運行32次(每次添加警報時都會顯示),但drawLayersWhenAllAreLoaded僅調用一次。

回答

0

所以我最終能夠使load方法執行。我將我的代碼切換到使用imagesLoadedhttp://desandro.github.io/imagesloaded/),但仍然沒有解決我的問題。看起來在Mobile Safari中,它不會加載未添加到DOM的對象。一旦我將我的動態生成的圖像添加到div,它開始工作。我不確定這是Apple設計的內存目的,還是隻是一個問題。

以爲我會張貼這個來幫助其他人可能遇到這個問題。

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