如何调用stop()而不强制webkit浏览器中的错误

时间:2011-05-25 11:05:21

标签: javascript url try-catch

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

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未定义(未定义) 这在野生动物园:

无法加载资源

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

显然我已经尝试过了     尝试{       iframe.contentWindow.window.stop();     }赶上(E){}

根据要求我更乐意分享这段代码,但我警告你它听起来要复杂得多。

1 个答案:

答案 0 :(得分:0)

我认为你可能在这个问题上走错了路。从根本上说,您无意使用Javascript控制浏览器,只会影响您自己页面的呈现。像网络连接这样的东西完全由幕后的浏览器管理,所以你可以做的任何修改都可能在某种程度上暗示/破解。

我退后一步,从网页的角度考虑你要做的事情的语义。你是如何触发图片上传的?根据此提示/请求的格式,取消它的语义可能会有所不同。

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

在不知道具体细节的情况下,在考虑请求 - 响应协议的情况下,自然要做的就是发送消息“实际上,删除/忽略我刚刚上传的图像”。

我怀疑为此目的使用Stop是因为:

  1. 它可能会取消页面上的所有通信 - 它就像一个静态/全局方法,因为它会对页面上的任何其他内容起到非常糟糕的作用。这可能包括您放在那里的其他面向客户的元素,或外部事物,如广告(收入较少)或网络跟踪(不准确和零星的数据)。当你真的只想停止一件特定的事情时,杀掉所有是一个糟糕的设计。
  2. 我甚至不确定在调用Stop时浏览器是否需要停止“后台”任务,因为它通常是一个浏览器chrome命令来停止更改当前页面。根据浏览器如何考虑图像上传(以及如何触发),它可以将停止命令解释为“不要更改我正在打开的页面”,从而继续上传图像。
  3. 代码“比听起来更复杂”这一事实也是一个警告 - 增加更多层次的复杂性不太可能是解决简单听觉要求的最佳方法。退一步说明你想要实现的目标的基础,以及如何通过Javascript / HTML“合法地”要求浏览器这样做。