如何检测网页是从网站还是本地文件系统运行?

时间:2016-12-19 16:28:15

标签: javascript safari webarchive

此问题之前已被提出,但所提供的答案都不正确。我不被允许对原始问题(或答案)发表评论,因此我正在向我建议一个新问题。

How to detect if a web page is running from a website or local file system

我需要检测用户是否通过Safari Web Archive访问了特定页面,或者访问了正确的网址。

链接问题的答案都不适用于Safari网络存档。 接受的答案是:

switch(window.location.protocol) {
   case 'http:':
   case 'https:':
     //remote file over http or https
     break;
   case 'file:':
     //local file
     break;
   default: 
     //some other protocol
}

但是,出于某种原因,Safari webarchive文件似乎表现得像在服务器上远程访问它们。在测试位置协议时,它总是返回http,而不是file://

在safari webarchive中唯一不同的东西似乎是文件本身的mimetype,即“application / x-webarchive'但似乎没有可靠的方法来检测当前页面的mime类型。

我很乐意找到一个正确的解决方案来检测远程访问页面中的本地页面。

1 个答案:

答案 0 :(得分:0)

我知道这个问题太老了,但是我也需要一个解决方案。在任何地方都找不到好的答案之后,这就是我经过大量测试后得出的结论。

jQuery(document).ready(function () {
    // Check if the page is being loaded from a local cache
    if(jQuery('body').hasClass('localProtection')) {
        window.document.location = 'https://example.com/somepage/';
        return;
    } else {
        jQuery('body').addClass('localProtection');
    }
});

最初从远程站点加载页面时,将“ localProtection”类添加到body元素。如果该页面随后由浏览器保存在本地,则此类与body元素一起保存。加载页面后,我们检查此类是否已经存在并采取措施-以我为例,重定向回原始站点。这类似于eFUSE防止某些设备上的固件降级的方式。

这对我来说适用于Safari,Chrome和Firefox。