【问题标题】:how to call stop() without forcing an error in webkit browsers如何在不强制 webkit 浏览器出错的情况下调用 stop()
【发布时间】:2011-05-25 11:05:20
【问题描述】:

经过数周史诗般的 javascript 研究后,我终于发明了我认为非常酷的 Object。 我遇到了一项需要我取消上传图片的任务。 我原本以为:

image.src='' 

足够了,但浏览器仍会下载图像。

所以我很酷的解决方案是在正文中放置一个不可见的 iFrame 并在其中附加一个图像标签,如果我想停止下载,我只需调用

iframe.contentWindow.window.stop(); // and something similiar for IE 8

我有完整的解决方案,但在下载过程中调用 stop() 会在 chrome 中显示:

GET http://xx.xx.com.au/images/products/1.png未定义(未定义) 这在 Safari 中:

加载资源失败

基本上我是在问是否有针对这个问题的 try-catch 语句

显然我已经尝试过了 尝试{ iframe.contentWindow.window.stop(); }catch(e){}

应要求我非常乐意分享此代码,但我警告您它比听起来要复杂得多。

【问题讨论】:

  • 您可以明确这是上传还是下载。这两个词你都用过,区别很关键。
  • 嗨,我似乎找不到对你的帖子发表评论的地方,所以我会在这里回复 IJW,非常抱歉,我打算输入两次下载。相信大家都看过: var img = new Image();//制作不可见的图片 img.src = 'image.imageserver.com/image.png' //获取图片 img.onload=function(){//给个回调//某种回调 } img.src=''//希望停止下载,但浏览器仍然可以得到它,这允许您在显示之前缓存图像,我正在做的是这个的扩展版本它允许你输入 img.stop(),这实际上会取消 do

标签: javascript url try-catch


【解决方案1】:

我认为你可能在这个问题上走错了路。从根本上说,您并不意味着能够使用 Javascript 控制 浏览器,而只是影响您自己页面的呈现。诸如网络连接之类的事情完全由幕后的浏览器管理,因此您可以做的任何修改都可能在某种程度上是一种提示/黑客攻击。

我会退后一步,从网页的角度考虑您正在尝试执行的操作的语义。你是如何触发图像上传的?根据此提示/请求的格式,取消它的语义可能会有所不同。

另外,您取消的动机是什么 - 节省带宽?我的感觉是,如果您说“上传此图像”(例如提交表单),则可能需要几秒钟的事实是您无法通过 Javascript 真正访问的实现细节。另外,如果用户有一条T1线,而你想取消的时候图片已经上传完成了怎么办?

在不知道具体细节但考虑请求-响应协议的情况下,很自然的做法是事后发送一条消息说“实际上,删除/忽略我刚刚上传的那个图像”。

我怀疑是否将 Stop 用于此目的,因为:

  1. 它可能会取消页面上的所有通信 - 它就像一个静态/全局方法,因为它会与页面上的任何其他内容一起播放非常糟糕。这可能包括您放在那里的其他面向客户的元素,或外部事物,例如广告(对您来说收入减少)或网络跟踪(对您来说是不准确和零星的数据)。当您实际上只想停止一件特定的事情时,杀死一切只是糟糕的设计。
  2. 我什至不确定浏览器是否需要在调用 Stop 时停止“后台”任务,因为它通常是停止更改当前页面的浏览器 chrome 命令。根据浏览器如何看待图片上传(以及它是如何触发的),它可以将 Stop 命令解释为“不要更改我所在的页面”,从而继续上传图片。

代码“比听起来更复杂”的事实也是一个警告 - 添加更多复杂层不太可能是解决听起来简单的需求的最佳方法。退后一步,再次谈谈你试图实现的基本原理,以及如何“合法地”通过 Javascript/HTML 要求浏览器这样做。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-01-13
    • 2011-09-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多