2009-08-06 44 views
8

這個函數有什麼問題?它可以在Opera和Firefox,但Windowsjavascript crossbrowser新圖像()

function getImage(url) {   
    var image = document.createElement('img'); // new Image(1, 1); 
    image.src = url; 
    image.onload = function() {}; 
} 

下好好嘗試在Safari上工作時,我嘗試的getImage(「http://site.com/someservlet.gif」) 此圖片未加載(因爲someservlet.gif記錄所有的請求) 它適用於Opera和Firefox,但不適用於Safari。我嘗試了「新圖像()」 和「document.createElement('img')」 - 結果相同。

========== UPDATE: 功能效果很好,當它直接調用,問題開始時,它從事件偵聽器稱爲

<a href="http://google.com/" 
onclick="getImage('http://127.0.0.1/pic/img.gif?rnd=' + Math.random());">google</a> 

<a href="#" 
onclick="getImage('http://127.0.0.1/pic/img.gif?rnd=' + Math.random());">local</a> 

<script type="text/javascript"> 
function getImage(url) { 
    var image = document.createElement('img'); 
    alert('1'); 
    image.onload = function() {alert(image.src);}; 
    image.src = url; 
    alert('2'); 
} 
</script> 

「本地」鏈接效果很好在Firefox,歌劇和Safari瀏覽器(但Safari瀏覽器顯示alert1,alert2,然後警告「src」出於某種原因,而其他瀏覽器顯示alert1,alertSrc,alert2)

「google」鏈接Opera,Firefox - 運行良好(alert1,alertSrc,alert2 ),但Safari不顯示alertSrc。在Safari中,您可以看到alert1,alert2和全部。當有人點擊Safari中的「谷歌」鏈接時,Servlet「/pic/img.gif」沒有得到請求。

什麼問題,如何解決?

謝謝。

回答

10

我的第一印象是,你在瀏覽器中的一些優化的代碼,推遲不顯示的圖像的加載絆倒了。到目前爲止:

的Safari 4.0.2(530.19.1):

  • 作品對我來說,所描述的(包括本地,谷歌,當我改變了事件鼠標懸停)
  • 排序的如所描述的

    • 作品:警報是警報1,alertsrc,警報2

    火狐每晚(3.5.3pre,20090805)。很好笑,因爲它一開始並不奏效。嘗試將圖像加載到緩存中,看看它是否會影響測試。

  • 排序的警報是警報1,然後alertsrc和警報2在同一時間(移動對話框,看看兩者)

谷歌瀏覽器(2.0.172。39):

  • 作品在Safari中,雖然鼠標懸停似乎觸發事件太多
  • 排序的警報是警報1,警報2,alertsrc

的Internet Explorer(7.0.6001.18000)

  • 按描述工作(包括本地,谷歌,以及何時更改爲鼠標懸停)
  • 預警的排序是alert1,alertsrc,alert2

請記住,我將映像位置更改爲http://www.google.com.ar/images/nav_logo6.png,因爲我現在沒有運行隨機圖像腳本。 在此基礎上,我建議你自己的緩存運行測試不同的圖像,並試圖不存在的圖像,圖像緩存,圖像不是。

原因警報不一定是順序是不同的瀏覽器加載以不同的順序圖像,並且該圖像被加載後的alertsrc只發生。好好檢查一下,如果圖像加載與否是,如果寬度爲0

2

在IE和Safary中試試這個例子,並且完美地工作。

function getImage(url) {   
    var image = document.createElement('img'); // new Image(1, 1); 
    image.src = url; 
    image.onload = function() {alert('ok');}; 
} 
getImage("http://www.google.com.ar/images/nav_logo6.png"); 
0

無法得到它工作在IE的唯一方法是使用新的圖像()而不是使用document.createElement。這是可以解決你的onload功能後,移動image.src到:

image.onload = function() {} 
image.src = url; 
6

我認爲這是一個緩存的問題。
當你說image.src = url; javascript立即去獲取圖像,並且如果圖像被緩存,然後瀏覽器將只使用緩存的一個並觸發onload,現在你說image.onload = function() {};但onload已經被解僱,所以function()永遠不會調用。

無論如何,這一切只是我的猜測,我不知道如果我是對的。但是,如果我是正確的,你應該能夠通過移動

+0

感謝image.src = url;image.onload = function() {};修復它幫我 – oyatek 2012-11-12 17:53:54