阻止 iframe 加载

16

我有一个 iframe,通过它上传文件,我的问题是,在上传过程中如何停止它?我尝试使用 jQuery 函数 attr() 更改 src,但没有成功。我考虑使用 js 删除整个 iframe,但这会引起其他问题,而且我也不确定是否有效。还有其他方法吗?

我的下一个问题是,是否可以隐藏加载指示器,以免混淆用户认为页面正在加载或其他什么。

像使用 flash 或其他东西的答案将不被接受,因为我已经使用了 iframe,只需要完成这两件事。

这是我的 iframe 代码:

<iframe onload="file_uploaded()" class="iframe" src="user/upload_image/" name="iframeTarget" ></iframe>

1
你尝试使用 document.location 更改源(src)了吗? - Michiel van Oosterhout
@michielvoo,你能具体一点吗?我已经尝试过这样做了:document.getElementById('myId').location="#"。当然,我给我的iframe设置了id为myId,但它没有起作用。 - Linas
1
应该是 document.getElementById('myId').document.location。我认为 "#" 不起作用。你必须导航到另一个位置来取消 iframe 内部的操作,但 # 只是当前页面中未命名的锚点。但总的来说,使用 Rick Kuipers 下面给出的答案会更好。 - Michiel van Oosterhout
1
可能是重复的问题:使用JavaScript停止iframe加载页面 - Unicornist
3个回答

23
我相信下面的回答可以回答你的问题:https://dev59.com/qnE95IYBdhLWcg3wrP0n#2207589

对于FireFox/Safari/Chrome,您可以使用window.stop():

window.frames[0].stop()

对于IE,你可以使用document.execCommand('Stop')执行同样的操作:

window.frames[0].document.execCommand('Stop')

要实现跨浏览器的解决方案,你可以使用:

if (navigator.appName == 'Microsoft Internet Explorer') {
  window.frames[0].document.execCommand('Stop');
} else {
  window.frames[0].stop();
}
如果您想让iframe指向另一个页面,可以尝试将其重定向到"about:blank"

谢谢,它可以工作了。现在该怎么去除那个烦人的加载指示器,以便用户不会看到页面正在加载呢? - Linas
你能解释一下你所说的加载指示器是哪一个吗?如果我们在谈论光标,那么使用CSS cursor:default; 就可以解决这个问题。 - Rick Kuipers
不,我指的是所有顯示頁面正在加載的內容。例如,在Firefox的右下角有一個框,顯示所有正在加載的元素。你知道我的意思...我想讓它看起來像我在使用Ajax,但實際上我並沒有使用。 - Linas
1
恐怕你无法避免这个问题。浏览器不会让你控制它。据我所知。 - Rick Kuipers
为避免使用jQuery出现问题,请使用以下代码:document.getElementById("myId").getElementsByTagName('iframe')[0].stop(); - Claudio Santos
2
这种方法仅在框架(iframes)具有与父页面相同域中的“src”时才有效,否则您将获得访问帧内任何属性/函数(甚至是“stop()”)的权限错误。 - Unicornist

9
这对我来说有效(IE,Chrome,FF,Opera):
$iframe.attr('src','about:blank');

3
当你与页面及其URL无关且框架(iframe)位于另一个域时,这实际上是一种很好的解决方案。 纯JavaScript版本: document.getElementsByTagName('iframe')[0].src = "about:blank"; 请记住,不能使用frames[0],因为它会给你在iframe内部的window,而不是具有src属性的页面中的iframe元素。 - Unicornist

3

您可以使用此方法来禁用所有iframe内容。

<script>
    var frames = window.frames;
    var i;

    for (i = 0; i < frames.length; i++) {
        frames[i].location = "";
    }
</script>

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接