2012-01-23 9 views
0
function controllaFoto(target, username) { 
    var _URL = window.URL || window.webkitURL; 
    var img = new Image(); 
    img.onload = function() { 
     if(this.width > 240 || this.height > 240) { 
      document.getElementById("photoLabel").innerHTML = "Text"; 
      document.getElementById("preview").setAttribute("src", "profile?to=showImage&username="+username); 
      target.value = ""; 
     } else { 
      document.getElementById("photoLabel").innerHTML = ""; 
      document.getElementById("preview").setAttribute("src", this.src); 
     } 
    }; 
    img.src = _URL.createObjectURL(target.files[0]); 
    return true; 
} 

をimage.onload発生しません。このスクリプトはonchangeonsubmit属性によって呼び出され、FFとChromeではなく、オペラとSafariで正常に動作しています。イベントonloadはトリガーされません。どうして?オペラとSafariが

更新日私はWindowsでテストしています。

UPDATE 2問題は_URLundefinedであるということです。試しましたが、まだ動作していません。

var _URL = window.URL || window.webkitURL || window.mozURL || window.msURL || window.oURL; 


Chromeの値はobject DOMURL、Firefoxの場合はobject MozURLPropertyですが、SafariとOperaの場合はundefinedです。コンソールにUncaught exception: TypeError: Cannot convert '_URL' to objectと表示されます。

答えて

1

this MDN pageによると、createObjectURLはOperaまたはSafariの一部のバージョンでサポートされているようには見えません。それだけであなたの主な問題かもしれません。エラーコンソールで、createObjectURLメソッドの欠如について不平を言っているかどうかを調べましたか?そのメソッドが存在しない場合、.srcへの代入は決して行われないため、成功したロードイベントは発生しません。

また、私は確かに言えませんが、これはまた私にとって潜在的な問題のように見えます。新しく作成されたImageオブジェクトをどこかに保存して保存する必要があるかもしれません。あなたのコードが上に書かれているように、ガベージコレクタは、もはやそれへの参照がないのでimgオブジェクトを自由に処分することができます。

コードをすべて表示していないかもしれませんが、書かれているように、決して使用しない画像をロードするポイントは何ですか?

私は、使用しないイメージを使用しないようにコードを変更する方法を提案します。または、実際に新しく作成したimgタグをどこかに保存して、それが持続するようにし、ガベージコレクションを取得しないようにします。

また、イメージが正常に読み込まれていることをどのように知っているか質問します。イメージを使用していない場合は、イメージが正常に読み込まれていることをどのように知っていますか?

+0

ご返信ありがとうございます。私はスクリプトの一部を投稿しました。私がファイル 'ContentType'をチェックする前に、それはイメージであると確信しています。そのような画像をアップロードできないことをユーザーに警告するために、その幅と高さを確認する必要があります。すべてのコントロールが渡された場合、ユーザーは同意書を使用してアップロードできます。 'createObjectURL'メソッドの欠如について、Eclipseは私にエラーを表示しません(それが正しいコンソールであるかどうかをチェックする)。 – Simon

+0

私はEclipseは分かりませんが、あなたが探している必要があるエラーコンソールはブラウザにあると思います。実行時エラーを表示する必要があります。 '_URL'に' createObjectURL'という名前のメソッドが含まれていないか、 '_URL'自体が定義されていないことを示す必要があります。 – jfriend00

+0

私は自分の質問を編集しました。 Opera Dragonflyのデバッグコンソールでは、 '_URL'が' undefined'となっています。 – Simon

関連する問題