2011-08-09 42 views
18

昨晚,我想我会做一个快速的项目来演示HTML5功能并尝试一些事情。不过,我似乎无法弄清楚如何在Safari中实现拖放功能,而在Chrome和Firefox中完美运行。更确切地说,当您尝试将网站内的图像拖放到放置区域时,似乎在Safari中不会触发放置事件。同时,当您从桌面拖放文件时,它会触发。Safari 5.1打破了HTML本地拖放?

我真的不知道,但我敢肯定,当我试图在工作中相同的脚本(在那里我有Safari浏览器5.0.2等),它发射的下降事件(要先去检查一下明天要肯定),并给了我预期的与FileReader相关的错误。但是当我在自己的电脑上安装Safari 5.1时,我只能得到dragover,进入和离开事件(如果文件被拖入浏览器中,也会放弃)。

我一直在谷歌上搜索了一段时间,似乎没有找到拖放实际工作在Safari 5.1的一个例子。即使Safari的dev-centre's sample不起作用,更不用说html5demo.com 1html5demo.com 2。这让我想到了Safari是否有bug,或者他们是否已经实施了一些在开发中心没有反映出来的强制措施(2009年的最新更新)。

我试图修复的脚本是my site(抱歉,没有问题的具体代码发布,因为它似乎在其他地方也被破坏)。

PS!我可能会在我自己的网站中引入一些错误,同时拼命尝试修复Safari中的拖放操作,但我现在太累了,无法修复它们。

UPDATE:在工作中就证实了drop事件会触发在Safari 5.0.2在Mac OS X

更新2:也证实,一切都运行完美的Safari 5.0.6上赢7,失败与5.1

+6

确认OP描述的错误,Safari 5.1(7534.48.3)。在Chrome中工作良好。 –

+0

同样适用于我:在Win7 x64上重新安装Safari 5.1(7534.50)时拖放失败,同一页在以前的版本(以及Chrome/FF6/IE9)上运行良好。没有扩展名,清空缓存。 –

+0

运行10.6.8与Safari 5.1(6534.50)适合我。 5.1在Windows 7上做到了。这是一个狮子问题吗? –

回答

1

只是为了澄清在同一台计算机:访问您的网站,并没有发现任何错误。打开控制台,没有错误,并且一切似乎按设计运行。尝试所有提供的示例没有错误。

所有的例子做工精细Safari浏览器5.1版(7534.48.3)。对不起,伙伴 - 也许这是你改变的设置?

允许我提出一个可能性:

转到Safari - >Empty Cache...然后Safari - >Reset Safari...尝试重新加载页面。

有可能的,有一些高速缓存的是创造一个冲突。 你的剧本似乎没有丝毫错误。

编辑

有些事情要检查...

是否包含任何保留字你的函数名?我已经这样做了,如果没有发现任何错误,但它根本行不通。

我已经受够了Safari浏览器没有运行写为funcName = function(){}方法的一些奇怪的问题。如果你可以确定没有触发的方法(我在开发时添加了一个叫做DBG的小函数,我将在下面添加它 - 基本上,如果设置了调试标志,你可以登录到控制台),你可以尝试重写该函数。

// 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,没有运气。它可能仍然是那些神秘的错误之一,开发人员不可能追踪到这些错误,因为它们在极少数情况下仅在确切的环境条件下才会出现。 – zatatatata

5

我在前一天安装​​的Windows 7 PC上使用Safari 5.1.5(7534.55.3),以前没有安装Safari,也无法获得任何在线HTML5拖放代码演示工作。

我正在使用drag-n-drop进行项目工作,Modernizr告诉我用safari(Modernizr.draganddrop == true)很适合,但是当我实际删除项目时,drop事件不会火。

我已经添加了警报调试,没有任何东西。

我的测试显示Windows 7 PC放置事件中的Safari 5.1.5(7534.55.3)已损坏。所有其他拖动事件似乎都起作用:dragstart,dragend,dragenter,dragleave,dragover。

0

我遇到过类似的问题,drop事件似乎没有被解雇。 Safari显然希望“dragover”事件也受到约束。只要我还补充说,它的工作。所以...我分享以防万一它是相关的。

我第一次尝试:

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

我的 “修正”:

$(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

我知道我做错了,得到-1?但我不确定是什么...是因为我的答案被视为偏离主题?这是我遇到的一个真正的问题和我的解决方案。当我搜索我的问题时,这个问题是谷歌提出的问题。我认为其他人也会这样做,所以我想帮助其他人。但是,有没有更好的办法,我应该处理? –

+0

阅读更多......我的答案与John Starr Dewars不一样(他更好,我的情况更糟)? 也许-1是因为他的回答比较好? –

+2

可能有些jQuery hater。噢,你在那里做了什么样的yaml-esque语法?在罗马时,说纯粹的JavaScript。 (另外,尽量不要担心,SO点有时会有点“嘈杂”:它是摆动和回旋处)。 – aaaidan

8

测试的Safari 5.1.7的Mac:

要查看drop事件火灾,您必须处理dragover事件并致电event.preventDefault()

这里的(相当有趣)的讨论,我找到了答案:

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

我不知道这是否真的解决了问题,因为提问者的网站(至少今天)做到这一点。它可以在我的机器上正常工作(就像HTML5演示页面一样)。但是这可能会帮助有人来解决这个问题,他不知道这个相当不直观的实现细节。

+0

调用'event.preventDefault()'在Safari 5.1.7 Win 7 x64中为我工作。 –