【问题标题】:Detecting blocked local URLs in JavaScript在 JavaScript 中检测被阻止的本地 URL
【发布时间】:2014-08-02 08:23:57
【问题描述】:

我在网站内放入一个本地网络 URL 的链接,即

<a href="file://///server/share">Your network share</a>

在应用程序中,我知道potential for browsers to block the request

我想知道是否有任何方法可以检测或预测阻塞,以便我可以向用户显示替代结果(就像只是告诉他们路径而不是尝试为他们打开它)?

【问题讨论】:

  • 这可能对你有用.. stackoverflow.com/questions/5621697/…
  • 其实我想我为你找到了一个更好的解决方案..你可以使用 jquery 吗?
  • 是的,我已经在使用 jQuery。任何 jQuery 解决方案都可以正常工作。图像解决方案虽然并不真正起作用,因为该文件夹不一定包含图像,并且内联引用本地数据的安全性与链接到它完全不同。

标签: javascript html


【解决方案1】:

其实我认为你可以使用隐藏的 iframe:

在你的情况下,我会在该链接上有一个点击事件处理程序,如下所示:

已编辑:现在使用超时技术检查帧是否已加载

var _errtimer, link, href;
function clickHandler(e) {
    e.preventDefault();
    link = $(this);
    href = link.attr('href');
    var frame = $("<iframe id='testframe' style='visibility:hidden;' src='" + href + "'></iframe>");
    $("body").append(frame);

    _errtimer = setTimeout(frameError, 2000);

    $("#testFrame").on('load', function () {
        clearTimeout(_errtimer);
        console.log('frame loaded successfuly');
        location.href = href;
    });
}
function frameError() {
    alert('error in frame');
    // no access, provide the path..
    lnk.html("the path: " + href);
}

让我知道这是否适合你。

【讨论】:

  • 不,没用。即使在允许的情况下也会在 IE 上失败(它认为它是跨域 iframe - file://///server 是另一个域),即使在被阻止时也会通过 FireFox(因为它甚至不尝试加载它 - 它加载大约:blank & 很高兴提供空的 HTML 字符串)。
  • 你有我可以看到的链接吗?
  • 基本上这个想法是首先尝试将链接加载到 iframe 中。检查它是否有效的功能可以更改以适应不需要/想要的结果的每个跨浏览器条件iframe 并根据它采取行动
  • 我尝试了另一种可能更有帮助的方法。请参阅更新的答案。
  • 没有它的 URL,并且 jsFiddle 现在没有加载来制作一个。但是我的测试页面的总 HTML 是在链接周围添加&lt;html&gt;&lt;body&gt;&lt;/body&gt;&lt;/html&gt;,然后在你的 JavaScript 中加上一个 $('a').click(clickHandler); 调用。您的方法适用于测试另一个网站 URL,它不适用于本地网络 file:///// 协议 URL。
猜你喜欢
  • 2014-02-28
  • 2011-08-15
  • 2012-03-03
  • 2012-05-23
  • 2020-03-16
  • 1970-01-01
  • 2019-04-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多