2011-08-09 2 views
18

昨夜、私はHTML5の機能を実演したり、いくつかのことを試したりするための素早いプロジェクトをやると思いました。しかし、私はSafariでドラッグ&ドロップの仕方を理解することはできませんが、ChromeとFirefoxでは完全に機能します。もっと正確に言えば、ウェブサイト内の画像をドロップ領域にドラッグしようとすると、Safariでドロップイベントが発生しないようです。デスクトップからファイルをドラッグ&ドロップすると同時に起動します。Safari 5.1がHTMLのネイティブドラッグアンドドロップを壊しましたか?

私は実際にはわかりませんが、同じスクリプトを(私がSafari 5.0.2などがあるところで)試してみると、ドロップイベントが発生しました。明日はそれをチェックします確かに)、私にFileReaderに関連する予期されたエラーを教えてくれました。しかし、自分のPCにSafari 5.1をインストールしたばかりのときには、ドラゴーバーを取得し、イベントを開始したり終了したりするだけです(ファイルがブラウザにドラッグされた場合もドロップされます)。

私はしばらくの間Google検索していましたが、Safari 5.1で実際に動作するドラッグアンドドロップの例はひとつも見つからないようです。 Safariのdev-centre's sampleでも動作しません。html5demo.com 1html5demo.com 2はもちろんです。これにより、Safariにバグがあるかどうか、あるいはデベロッパーセンターに反映されていないもの(2009年に最後に更新されたもの)が実装されている可能性があります。

私が修正しようとしているスクリプトは、my siteです(残念ながら、他の場所でも壊れているように、特定のコードを投稿する必要はありません)。

PS!私は自分のサイトにいくつかのバグを導入しているかもしれませんが、Safariでドラッグアンドドロップを修正しようとしていますが、今はあまりにも疲れています。

UPDATE:はちょうどドロップイベントは、Mac OS X上のSafari 5.0.2で火を行い、その作業で確認

UPDATE 2:もすべてがSafariは上の5.0.6と完全に正常に動作することを確認しましたWin 7、5.1で失敗した同じコンピュータ

+6

エラーを確認するOPには、Safari 5.1(7534.48.3)があります。 Chromeで正常に動作しました。 –

+0

私と同じです:Safari 5.1(7534.50)をWin7 x64に新規インストールするとドラッグドロップが失敗し、同じページが以前のバージョン(およびChrome/FF6/IE9)で正常に機能しました。拡張子なし、空のキャッシュ。 –

+0

Safari 5.1(6534.50)で10.6.8を実行しています。 Windows 7上の5.1はそうします。それはライオンの問題ですか? –

答えて

1

あなたのサイトにアクセスしてエラーがないことを確認してください。コンソールを開き、エラーもなく、すべてが設計どおりに機能するように見えました。提供されたすべての例をエラーなしで試しました。

すべての例が正常に動作するSafariバージョン5.1(7534.48.3)。申し訳ありません、仲間 - あなたが変更した設定かもしれませんか?

私は可能性を示唆することを許可する:

ゴーSafariへ - >Empty Cache...その後Safari - >Reset Safari...をページをリロードしてみてください。

おそらく、キャッシュされているものがあり、競合が発生しています。 少しでもあなたのスクリプトに間違いはないようです。

編集

チェックするためにいくつかのものは...

は、予約語を含むあなたの関数名のいずれかがありますか?私はこれをやったことがありますが、それは何のエラーもスローされませんでしたが、それは単に動作しませんでした。

私は、Safariには、funcName = function(){}と記述されたメソッドを実行していないという奇妙な問題がありました。もし発火していないメソッドをピン止めすることができれば(私が開発しているときは、以下に追加する少しの機能を追加します - 基本的に、デバッグフラグが設定されていればコンソールにログオンできます)関数を書き直してみてください。

// Some sort of boolean flag. 
var debug = true; 

// This is kind of an obvious function, but can be expanded as you like. 
// Little tricks to make life easier. 
function DBG(str) { 
    debug ? console.log(str) : return; 
} 

は、私はまだ、これは何か間違ってキャッシュに帰着最終的には思うが、それは試してみる価値はあります。

+0

問題は私のスクリプトでのみ発生したが、何らかの理由でSafariをきれいにインストールすると、ドラッグアンドドロップ(Safariのドキュメントサンプル)。私はリセットとキャッシュを空にしようとしますが、それを体験している唯一のもの(私の元の投稿に対するコメント)ではないように、何らかの組み合わせがこのバグを引き起こすようです。 – zatatatata

+0

これは奇妙です - 私は問題なしでまったく同じコピーを実行しています。論理的には、同じソフトウェアを使用して一部のマシンで設計されたものが実行された場合、問題はスクリプトまたはソフトウェアパッケージではなく、変更可能な側面によって競合が発生する。ユーザー間で変更される傾向のあるもの:キャッシュ、設定、拡張子...これは良い点をもたらします.Safariで拡張機能を使用していますか? 'Safari' - >' Preferences ... 'をチェックし、' Extensions'タブを見てください。ほとんどの拡張機能はJSなので、矛盾が生じる可能性があります。 – stslavik

+0

これはクリーンインストールです(Safariの以前のバージョンもありません)。キャッシュをリセットして空にすることは効果がなく、5.0.6をインストールしようとしましたが、すべては完全に機能しましたが、5.1では運がありません。開発者が正確な環境下でしか遭遇しないときに追跡することは不可能な、不思議なバグの1つになる可能性があります。 – zatatatata

5

先日インストールしたWindows 7 PCでSafari 5.1.5(7534.55.3)を使用しています。Safariの以前のインストールはありません。オンラインのHTML5ドラッグアンドドロップのデモを入手することはできません作業。

私はドラッグアンドドロップを使ってプロジェクトを進めています。モダリジザーは、私がSafari(Modernizr.draganddrop == true)と一緒に行くのは良いと言いますが、実際にドロップイベントはドロップされません火災。

アラートのデバッグを追加しましたが、何も追加しませんでした。

私のテストでは、Windows 7 PCドロップイベントのSafari 5.1.5(7534.55.3)が壊れています。 dragstart、dragend、dragenter、dragleave、dragoverの他のすべてのドラッグイベントが機能しているようです。

0

同様の問題が発生しましたが、ドロップイベントが発生していないようです。 Safariは明らかに "dragover"イベントも拘束されると予想しています。私もそれを加えてすぐに機能しました。だから関係がある場合は分かち合っている。

私の最初の試み:

$(document).bind 
    drop: (e) -> 
    // This never gets fired in safari (does work in chrome) 
    console.log e.originalEvent.dataTransfer.files 
    false 

私の "修正":サファリ5.1.7と

$(document).bind 
    dragover: (e) -> 
    console.log e 
    false 
    drop: (e) -> 
    // This does get fired (in chrome and safari) 
    console.log e.originalEvent.dataTransfer.files 
    false 
+0

私はそれを得るために何か間違ったことを理解していますか?しかし、私は何が分かっていないのですか?それは私の答えが話題に見えるのでですか?これは私が遭遇した本当の問題であり、私の解決策でした。この質問は、私が自分の問題を検索したときにGoogleに現れたものでした。他の人は同じことをやると思いますので、私は他の人を助けたかったのです。しかし、私はそれを処理すべきであるいくつかのより良い方法はありますか? –

+0

さらに読んでください...私の答えは、John Starr Dewarsと同じ概念ではありません(彼の方が良い、私の方が悪いです)。 彼の答えがよかったので、-1がありますか? –

+2

おそらくいくつかのjQueryの嫌がらせ。ああ、そこに行っているyaml-esque構文は何ですか?ローマでは、純粋なjavascriptを話すとき。 (また、心配しないようにしてください。SO点は時々少し騒々しいです:それはスイングとラウンドアバウトです) – aaaidan

8

テストマック:

dropイベント火災を表示するには、 dragoverイベントを処理し、event.preventDefault()に電話する必要があります。ここで

は、私は答えを見つけた(かなり面白い)の議論です:

http://www.quirksmode.org/blog/archives/2009/09/the_html5_drag.html

これは本当に問題を解決するかどうかアスカーのサイトは、(少なくとも、今日のような)これを行いますので、私は知りません。私のマシンではうまく動作します(HTML5デモページと同様)。しかし、これは、この問題でこのスレッドに来る誰かを助けるかもしれないが、これはむしろ直観的ではない実装の詳細について知りません。

+0

Safari 5.1.7 Win 7 x64で 'event.preventDefault()'を呼び出せました。 –